我的问题具体是关于数组,不是对象。
关于 malloc()
/free()
与 new
/delete
的一些问题,但它们都集中在它们使用方式的差异上。我了解它们的使用方式,但我不了解是什么根本差异导致了使用差异。
我经常听到 C 程序员说 malloc()
和 free()
是代价高昂的操作,但我从未听 C++ 程序员这样说 新建
和删除
。我还注意到 C++ 没有对应于 C 的 realloc()
的操作。
如果我正在编写等同于 C++ 的 vector
类,我希望在调整数组大小时避免复制整个数组,但使用 new
和 delete
你必须复制。在 C 中,我会简单地 realloc()
。值得注意的是,realloc()
可能只是复制整个数组,但我的印象是它使用了相同的指针并为其分配了更少的空间,至少在缩小规模时是这样。
所以我的问题是,malloc()
和 free()
使用的算法与 new
和 删除
。更具体地说,为什么 C 方式有更昂贵的耻辱,为什么 C++ 方式不允许在不复制的情况下调整大小?
最佳答案
引擎盖下没有真正的区别 - 通常默认的 new
和 delete
运算符将简单地调用 malloc
和 free
。
至于“更昂贵的耻辱”,我的理论是:在过去,每个周期都很重要,malloc
所花费的时间在很多情况下确实很重要。但到 C++ 出现时,硬件速度要快得多,免费商店经理所花费的时间也相应地减少了。重点从机器资源的有效使用转移到程序员资源的有效使用。
为什么 C++ 缺少 realloc
等价物,我不知道。
关于c++ - 如何在 C 和 C++ 中分配和释放 *array* 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1304737/