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

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


当前回答

同时,

全局的new和delete可以被覆盖,malloc/free不能。

此外,每个类型都可以重写new和delete。

其他回答

1.New syntex比malloc()简单

2.New /delete是一个运算符,其中malloc()/free() 是一个函数。

3.New /delete执行速度比malloc()/free()快,因为编译器直接粘贴了新的程序集代码。

4.我们可以通过操作符重叠来改变程序中的new/delete含义。

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

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

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

New和delete是c++中的操作符;也可以重载。 Malloc和free是c中的函数;

Malloc返回空PTR失败时,而新的抛出异常。

由malloc返回的地址需要再次按类型转换,因为它返回(void*)malloc(size) 返回类型化指针。

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

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

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