在 c++ 裏 new 有三個用法。1) new xxx, 2) operator new( int size ), 3) placement new.
最常用的是 new xxx 例如 pstr = new string(“xxx”); 這種會調用 string 的構造函數,並需要通過 delete pstr 來析構。
void* w = operator new(100);
operator delete(w);
- void* operator new( size_t size ) 這是一個函數和 malloc 一樣。需要調用 operator delete( void* ) 作用與 free() 一樣來釋放內存。
- 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 只是使用了了這塊內存而已。