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

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


当前回答

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

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

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

其他回答

同时,

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

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

要使用malloc(),我们需要包含<stdlib.h>或 <alloc.h>在程序中,这不是new. h所必需的。 New和delete可以重载,但malloc不能。 使用位置new,我们可以将地址传递到我们想要的位置 分配内存,但这在malloc的情况下是不可能的。

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

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

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

new和delete是c++原语,用于声明一个类的新实例或删除它(从而为该实例调用类的析构函数)。

malloc和free是C函数,它们分配和释放内存块(大小)。

两者都使用堆来进行分配。尽管如此,Malloc和free更“低级”,因为它们只是保留了一块可能与指针相关的内存空间。在该内存周围不会创建任何结构(除非您将C数组视为结构)。

new和malloc之间的主要区别是new调用对象的构造函数,而对应的delete调用对象的析构函数。

还有其他不同之处:

New是类型安全的,malloc返回void*类型的对象 new在错误时抛出异常,malloc返回NULL并设置errno New是运算符,可以重载,malloc是函数,不能重载 New[]分配数组,比malloc更直观和类型安全 malloc派生的分配可以通过realloc调整大小,新派生的分配不能调整大小 malloc可以分配一个n字节的内存块,new必须被要求分配一个数组,比如说char类型

看区别,总结是malloc是C式的,new是c++式的。使用适合您代码库的版本。

虽然使用不同的内存分配算法实现new和malloc是合法的,但在大多数系统上,new是使用malloc在内部实现的,不会产生系统级的差异。