1
35
Scott Meyers在他有效的C++书中说:项目5:在新的和删除的相应使用中使用相同的形式。
此外,内存分配器可能会分配存储对象所需的更多空间,在这种情况下,将返回的内存块大小除以每个对象的大小是行不通的。
根据平台的不同,
它不起作用的另一个原因是
参见:
编辑:在阅读了《安德烈评论》之后,我翻阅了Stroustrup的《C++设计与演化》一书,摘录如下:
正如@marcus所提到的,理性可能是“你不为你不使用的东西付费”。 编辑2: 在《C++程序设计语言,第三版》,第10版中,Bjarne Stroustrup写道:
|
2
10
决定分开的主要原因
两者最重要的区别是
当然,与其他答案中的奇怪说法相反,完全有可能取代
但是,这里的主要原因是
另外,这是关于
|
3
3
堆本身知道分配的块的大小-您只需要地址。看起来free()可以工作-您只需传递地址,它就可以释放内存。
两者之间的区别
|
4
1
没有理由分配程序 不能 跟踪它(事实上,写自己的就足够容易了)。 我不知道他们没有管理它的原因,也不知道实现的历史,如果我猜的话:其中很多“好吧,为什么这不是稍微简单一点?”问题(在C++中)归结为一个或多个:
在这种情况下,性能。使用
|
5
-1
这就更复杂了。 关键字和使用它来删除数组的约定是为了方便实现而发明的,有些实现确实使用它(不过我不知道是哪个)。MS VC++没有)。 方便之处在于: 在所有其他情况下,您知道通过其他方式释放的确切大小。删除单个对象时,可以从编译时sizeof()获取大小。当您通过基指针删除一个多态对象,并且您有一个虚拟析构函数时,您可以在vtbl中将该大小作为一个单独的条目。如果删除一个数组,除非您单独跟踪它,否则您如何知道要释放的内存大小? 特殊的语法只允许对数组跟踪这样的大小——例如,将数组放在返回给用户的地址之前。这将占用额外的资源,而非数组不需要。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |