最相关的区别是 new 运算符分配内存然后调用构造函数, delete 调用析构函数然后释放内存 .
0
new 调用对象的ctor, delete 调用dtor .
malloc & free 只需分配和释放原始内存 .
1
在C new / delete 中相应地调用构造函数/析构函数 .
malloc / free 只需从堆中分配内存 . new / delete 也分配内存 .
-3
new / delete 是C, malloc / free 来自好老C.
在C中, new 调用对象构造函数, delete 调用析构函数 .
malloc 和 free ,来自OO之前的黑暗时代,只分配和释放内存,而不执行任何对象的代码 .
438
新/删除
分配/释放内存
从'Free Store'分配的内存
返回完全类型的指针 .
new(标准版)永远不会返回NULL(将失败时抛出)
使用Type-ID调用(编译器计算大小)
具有显式处理数组的版本 .
重新分配(以获得更多空间)未直观处理(因为复制构造函数) .
是否调用malloc / free是实现定义的 .
可以添加新的内存分配器来处理内存不足(set_new_handler)
operator new / delete可以合法覆盖
constructor/destructor used to initialize/destroy the object
malloc /免费
分配/释放内存
从'Heap'分配的内存
返回空格*
失败时返回NULL
必须指定所需的大小(以字节为单位) .
分配数组需要手动计算空间 .
重新分配更大的内存块(无需担心复制构造函数)
他们将 NOT 调用new / delete
无法将用户代码拼接到分配序列中以帮助降低内存 .
malloc / free可以合法地覆盖 NOT
表格比较功能:
Feature | new/delete | malloc/free
--------------------------+--------------------------------+-------------------------------
Memory allocated from | 'Free Store' | 'Heap'
Returns | Fully typed pointer | void*
On failure | Throws (never returns NULL) | Returns NULL
Required size | Calculated by compiler | Must be specified in bytes
Handling arrays | Has an explicit version | Requires manual calculations
Reallocating | Not handled intuitively | Simple (no copy constructor)
Call of reverse | Implementation defined | No
Low memory cases | Can add a new memory allocator | Not handled by user code
Overridable | Yes | No
Use of (con-)/destructor | Yes | No
15 回答
最相关的区别是
new
运算符分配内存然后调用构造函数,delete
调用析构函数然后释放内存 .new
调用对象的ctor,delete
调用dtor .malloc
&free
只需分配和释放原始内存 .在C
new
/delete
中相应地调用构造函数/析构函数 .malloc
/free
只需从堆中分配内存 .new
/delete
也分配内存 .new
/delete
是C,malloc
/free
来自好老C.在C中,
new
调用对象构造函数,delete
调用析构函数 .malloc
和free
,来自OO之前的黑暗时代,只分配和释放内存,而不执行任何对象的代码 .新/删除
分配/释放内存
从'Free Store'分配的内存
返回完全类型的指针 .
new(标准版)永远不会返回NULL(将失败时抛出)
使用Type-ID调用(编译器计算大小)
具有显式处理数组的版本 .
重新分配(以获得更多空间)未直观处理(因为复制构造函数) .
是否调用malloc / free是实现定义的 .
可以添加新的内存分配器来处理内存不足(set_new_handler)
operator new / delete可以合法覆盖
constructor/destructor used to initialize/destroy the object
malloc /免费
分配/释放内存
从'Heap'分配的内存
返回空格*
失败时返回NULL
必须指定所需的大小(以字节为单位) .
分配数组需要手动计算空间 .
重新分配更大的内存块(无需担心复制构造函数)
他们将 NOT 调用new / delete
无法将用户代码拼接到分配序列中以帮助降低内存 .
malloc / free可以合法地覆盖 NOT
表格比较功能:
技术上,new分配的内存来自'Free Store',而malloc分配的内存来自'Heap' . 这两个区域是否相同是一个实现细节,这是malloc和new无法混合的另一个原因 .
唯一相似之处是
malloc
/new
都返回一个指针,它指向堆上的某些内存,并且它们都保证一旦返回了这样的内存块,除非先释放/删除它,否则不会再次返回 . 也就是说,他们都是"allocate"记忆 .但是,
new
/delete
还通过构造函数,析构函数和运算符重载执行任意其他工作 .malloc
/free
只能分配和释放内存 .事实上,
new
可以充分定制,它不一定从堆返回内存,甚至根本不分配内存 . 但是默认new
确实如此 .有一些事情
new
没有这样做malloc
没有:new
通过调用该对象的构造函数来构造对象new
不需要对已分配的内存进行类型转换 .它不需要分配大量内存,而是需要构造许多对象 .
所以,如果你使用
malloc
,那么你需要明确地做上面的事情,这并不总是实际的 . 此外,new
可以重载但malloc
不能 .总之,如果您使用C,请尝试尽可能多地使用
new
.new和malloc之间的主要区别在于new调用对象的构造函数,而相应的delete调用调用对象的析构函数 .
还有其他差异:
new
是类型安全的,malloc
返回void*
类型的对象new
在出错时抛出异常,malloc
返回NULL
并设置错误new
是一个运算符,可以重载,malloc
是一个函数,不能重载分配数组的
new[]
比malloc
更直观,更安全 .malloc
-来源的分配可以通过realloc
调整大小,new
-派生的分配无法调整大小malloc
可以分配一个N字节的内存块,必须要求new
分配一个数组,比方说char
类型看看差异,总结是malloc是C-esque,new是C -esque . 使用适合您的代码库的那个 .
尽管使用不同的内存分配算法实现new和malloc是合法的,但在大多数系统中,new使用malloc在内部实现,不会产生系统级差异 .
也,
全局new和delete可以被覆盖,malloc / free不能 .
更多新的和删除可以按类型覆盖 .
new
和delete
是C基元,它声明一个类的新实例或删除它(从而调用实例的类的析构函数) .malloc
和free
是C函数,它们分配和释放内存块(大小) .两者都使用堆来进行分配 .
malloc
和free
仍然更多"low level"因为它们只保留了一块可能与指针相关联的内存空间 . 在该内存周围没有创建任何结构(除非您将C数组视为结构) .new和delete是c中的运算符;也可以超载 . malloc和free是c中的函数;
malloc在失败时返回null ptr而new抛出异常 .
malloc返回的地址需要再次输入类型,因为它返回(void *)malloc(size)New返回类型指针 .
new是一个运算符,而malloc()是一个函数 .
new返回确切的数据类型,而malloc()返回void *(void类型的指针) .
malloc(),内存未初始化,默认值为垃圾,而在新的情况下,内存使用默认值初始化,就像在_上使用'zero (0)'一样 .
delete和free()都可以用于'NULL'指针 .
要使用
malloc()
,我们需要在程序中包含<stdlib.h>
或<alloc.h>
,而new
不需要 .new
和delete
可以重载但malloc
不能 .使用展示位置
new
,我们可以传递我们想要分配内存的地址,但是在malloc
的情况下这是不可能的 .此代码用于删除关键字或自由功能 . 但是当使用'malloc'或'new'创建一个指针对象并使用delete释放对象内存时,即使该对象指针可以在类中调用函数 . 之后使用free而不是delete然后它也可以在free语句之后工作,但是当使用两者时,只有指针对象不能在类中调用函数..代码如下:
1.new syntex比malloc()简单
2.new/delete是malloc()/ free()是函数的运算符 .
3.new/delete执行速度比malloc()/ free()快,因为编译器直接粘贴了新的汇编代码 .
4.我们可以在运算符重叠的帮助下更改程序中的新/删除含义 .