new/delete和malloc/free的区别是什么?
相关(重复?):在什么情况下我使用malloc vs new?
new/delete和malloc/free的区别是什么?
相关(重复?):在什么情况下我使用malloc vs new?
当前回答
New和delete是c++中的操作符;也可以重载。 Malloc和free是c中的函数;
Malloc返回空PTR失败时,而新的抛出异常。
由malloc返回的地址需要再次按类型转换,因为它返回(void*)malloc(size) 返回类型化指针。
其他回答
最相关的区别是,new操作符分配内存,然后调用构造函数,而delete操作符调用析构函数,然后释放内存。
要使用malloc(),我们需要包含<stdlib.h>或 <alloc.h>在程序中,这不是new. h所必需的。 New和delete可以重载,但malloc不能。 使用位置new,我们可以将地址传递到我们想要的位置 分配内存,但这在malloc的情况下是不可能的。
New调用对象的ctor, delete调用对象的dtor。
Malloc和free只是分配和释放原始内存。
new和delete是c++原语,用于声明一个类的新实例或删除它(从而为该实例调用类的析构函数)。
malloc和free是C函数,它们分配和释放内存块(大小)。
两者都使用堆来进行分配。尽管如此,Malloc和free更“低级”,因为它们只是保留了一块可能与指针相关的内存空间。在该内存周围不会创建任何结构(除非您将C数组视为结构)。
同时,
全局的new和delete可以被覆盖,malloc/free不能。
此外,每个类型都可以重写new和delete。