new/delete和malloc/free的区别是什么?

相关(重复?):在什么情况下我使用malloc vs new?


当前回答

唯一的相似之处是malloc/new都返回一个指向堆上一些内存的指针,而且它们都保证一旦这样的内存块被返回,它就不会再次返回,除非你先释放/删除它。也就是说,它们都“分配”内存。

然而,通过构造函数、析构函数和操作符重载,new/delete还执行其他任意工作。Malloc /free只分配和释放内存。

事实上,new具有足够的可定制性,它不必从堆中返回内存,甚至根本不必分配内存。但是默认的new可以。

其他回答

在c++中,new/delete函数相应地调用构造函数/析构函数。

Malloc /free只是从堆中分配内存。新建/删除也分配内存。

New调用对象的ctor, delete调用对象的dtor。

Malloc和free只是分配和释放原始内存。

最相关的区别是,new操作符分配内存,然后调用构造函数,而delete操作符调用析构函数,然后释放内存。

new/delete是c++, malloc/free来自优秀的老C。

在c++中,new调用对象的构造函数,delete调用析构函数。

malloc和free来自于OO之前的黑暗时代,它们只分配和释放内存,而不执行对象的任何代码。

有几件事是new做的,malloc没有:

New通过调用该对象的构造函数来构造该对象 New不需要对已分配的内存进行类型转换。 它不需要分配大量的内存,而是需要大量的内存 要构造的对象。

因此,如果使用malloc,则需要显式地执行上述操作,这并不总是实际的。此外,new可以重载,但malloc不能。

总之,如果你使用c++,尽量使用new。