【发布时间】:2009-08-20 08:23:35
【问题描述】:
我的问题是关于数组,不是对象。
关于malloc()/free() 与 new/delete 的 SO 存在一些问题,但所有问题都集中在它们的使用方式上的差异。我了解它们的使用方式,但我不了解导致使用差异的根本差异。
我经常听到 C 程序员说 malloc() 和 free() 是昂贵的操作,但我从未听过 C++ 程序员这样说 new 和 delete。我还注意到 C++ 没有对应于 C 的realloc() 的操作。
如果我正在编写与 C++ 的 vector 类等效的类,我希望在调整其大小时避免复制整个数组,但使用 new 和 delete 你必须复制。在 C 语言中,我会简单地 realloc()。值得注意的是,realloc() 可能只是复制整个数组,但我的印象是它使用相同的指针并为其分配的空间更少,至少在缩小尺寸时是这样。
所以我的问题是,malloc() 和 free() 使用的算法与 new 和 delete 使用的算法有何不同。更具体地说,为什么 C 方式有更昂贵的污名,为什么 C++ 方式不允许在不复制的情况下调整大小?
【问题讨论】:
-
realloc 非常时髦,它会根据实际参数和当前内存使用情况分配、删除、就地重新分配或重新分配和移动(从而使其他指针无效)。 IE。你不能从代码中真正看出它会做什么。
标签: c++ c arrays memory-management