1.在 c++ 里 new 有三个用法。1) new xxx, 2) operator new( int size ), 3) placement new.
2.最常用的是 new xxx 例如 pstr = new string(“xxx”); 这种会调用 string 的构造函数,并需要通过 delete pstr 来析构。
void* w = operator new(100);
operator delete(w);
1.void* operator new( size_t size ) 这是一个函数和 malloc 一样。需要调用 operator delete( void* ) 作用与 free() 一样来释放内存。
2.placement new 语法
char *p = new char[100];
char *q = NULL;
new (q) int;
delete []p;
placement new 的主要用途就是可以反复使用一块已申请成功的内存空间。这样可以避免申请失败的徒劳,又可以避免使用后的释放。 placement new 还会调用构造函数,但是因为此内存不是你在 new 的时候分配的那么就不应该 delete q 。
注意:它的内存释放应该是 delete []p,而不是 delete q。q 只是使用了了这块内存而已。
本文介绍了C++里new的三种用法。最常用的new xxx会调用构造函数,需用delete析构;operator new是一个函数,类似malloc,用operator delete释放内存;placement new可反复使用已申请内存,会调用构造函数,但不应用delete释放使用该内存的变量,而用delete []释放原内存。

3万+

被折叠的 条评论
为什么被折叠?



