new / delete和malloc / free有什么区别?
 new / delete和malloc / free什么区别? 
相关(重复?): 在什么情况下,我使用malloc vs新?
新/删除
-  分配/释放内存
- 从“Free Store”分配的内存
 - 返回一个完全types的指针。
 - 新(标准版)从不返回NULL(将失败)
 - 用Type-ID调用(编译器计算大小)
 - 有明确的版本来处理数组。
 - 重新分配(以获得更多的空间)不直观地处理(由于复制构造函数)。
 - 是否调用malloc / free是实现定义的。
 - 可以添加一个新的内存分配器来处理内存不足(set_new_handler)
 - 运算符new / delete可以合法地覆盖
 - 用于初始化/销毁对象的构造函数/析构函数
 
 
的malloc /免费
-  分配/释放内存
- 从“堆”分配的内存
 - 返回一个void *
 - 失败时返回NULL
 - 必须以字节指定所需的大小。
 - 分配数组需要手动计算空间。
 - 重新分配更大的内存块简单(没有复制构造函数担心)
 - 他们不会叫新/删除
 - 无法将用户代码拼接到分配序列中以帮助减less内存。
 - malloc / free 不能被合法覆盖
 
 
表格比较的function:
  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 
技术上来说,由new分配的内存来自“Free Store”,而由malloc分配的内存来自“Heap”。 这两个领域是否相同是一个实现细节,这是malloc和new不能混合的另一个原因。
 最相关的区别是new运算符分配内存,然后调用构造函数,并delete调用析构函数,然后释放内存。 
  new调用对象的ctor, delete调用dtor。 
  malloc & free只是分配和释放原始内存。 
 在C ++中, new / delete调用Constructor / Destructor。 
  malloc / free只需从堆中分配内存。  new / delete分配内存。 
  new / delete是C ++, malloc / free来自好老C. 
 在C ++中, new调用对象构造函数和delete调用析构函数。 
  malloc和free ,来自OO之前的黑暗时代,只分配和释放内存,而不执行对象的任何代码。 
 唯一的相似之处是malloc / new都返回一个指向堆中某个内存的指针,并且它们都保证一旦这样的内存块被返回,它将不会被再次返回,除非你先释放/删除它。 也就是说,他们都“分配”内存。 
 但是, new / delete另外通过构造函数,析构函数和运算符重载来执行任意其他的工作。  malloc / free只能分配和释放内存。 
 实际上, new有足够的可定制性,它不一定从堆中返回内存,甚至根本不分配内存。 然而,默认的new 。 
 有一些malloc没有做的new事情: 
-   
new通过调用该对象的构造函数来构造该对象 -   
new不需要分配内存的types转换。 - 它不需要分配大量的内存,而是需要构build大量的对象。
 
 所以,如果你使用malloc ,那么你需要明确地做以上的事情,这并不总是实际的。 另外, new可以被重载,但是malloc不可以。 
 总之,如果你使用C ++,尽可能地使用new 。 
new和malloc之间的主要区别在于new调用对象的构造函数,相应的delete调用调用对象的析构函数。
还有其他的区别:
- 
new是types安全的,malloc返回void*types的对象 - 
new错误发生exception,malloc返回NULL并设置errno - 
new是一个运算符,可以被重载,malloc是一个函数,不能被重载 - 
new[]分配数组,比malloc更直观,更安全 - 
malloc派生的分配可以通过reallocresize,new派生的分配不能resize - 
malloc可以分配一个N字节的内存块,new必须被要求分配一个chartypes的数组 
看看这些差异,一个总结是malloc是C-esque,新是C ++ – esque。 使用那个感觉正确的代码库。
尽pipe使用不同的内存分配algorithm来实现new和malloc是合法的,但在大多数系统中,新内部使用malloc在内部实现,不产生系统级差异。
也,
全局的new和delete可以被覆盖,malloc / free不能。
更多的新和删除可以被覆盖每个types。
  new和delete是C ++ 原语 ,它声明一个类的新实例或删除它(从而调用实例的类的析构函数)。 
  malloc和free是C 函数 ,它们分配和释放内存块(大小)。 
 两者都使用堆来进行分配。  malloc和free是更“低级”的,因为它们只保留了一块可能与指针相关的内存空间。 内存周围没有创build结构(除非你认为C数组是一个结构)。 
new和delete是c ++中的运算符; 这也可以超载。 malloc和free是c中的函数;
malloc在失败时返回空ptr,而新抛出exception。
malloc返回的地址需要通过types转换,因为它返回(void *)malloc(size)New返回types指针。
- new是一个运算符,而malloc()是一个函数。
 - new返回确切的数据types,而malloc()返回void *(voidtypes的指针)。
 - malloc(),内存没有初始化,默认值是垃圾,而在新的情况下,内存初始化为默认值,就像int中的“零(0)”。
 - delete和free()都可以用于'NULL'指针。
 
-  要使用
malloc(),我们需要在程序中包含<stdlib.h>或<alloc.h>。 -   
new和delete可以重载,但malloc不能。 -  使用
new的位置,我们可以传递我们想要分配内存的地址,但是在malloc情况下这是不可能的。 
此代码使用删除关键字或免费function。 但是,当使用'malloc'或'new'创build一个指针对象并使用delete删除对象内存时,即使该对象指针也可以在类中调用函数。 之后,使用自由,而不是删除,然后它也可以免费的语句后,但是当使用两个只有指针对象不能调用类中的函数..代码如下:
 #include<iostream> using namespace std; class ABC{ public: ABC(){ cout<<"Hello"<<endl; } void disp(){ cout<<"Hi\n"; } }; int main(){ ABC* b=(ABC*)malloc(sizeof(ABC)); int* q = new int[20]; ABC *a=new ABC(); b->disp(); cout<<b<<endl; free(b); delete b; //a=NULL; b->disp(); ABC(); cout<<b; return 0; } 
输出:
Hello Hi 0x2abfef37cc20
1.新syntex比malloc()简单
2.new/delete是一个运算符,malloc()/ free()是一个函数。
3.新/删除执行比malloc()/ free()更快,因为编译器直接粘贴新的汇编代码。
4.可以在操作员叠加的帮助下更改程序中新增/删除的含义。