1. 程式人生 > >C++中placement new操作符的使用

C++中placement new操作符的使用

一般在C++中我們常用的陣列定義方式如下:

1.直接進行陣列的定義,<TypeName> <Name> [ Num]={ };

2.使用new操作符進行動態建立,<TypeName*> <Name>=new  <TypeName>[Num],之後使用[]操作符進行操作

3.直接定義某個型別的指標,之後使用[]操作符進行操作;

placement new操作符的使用舉例:

假設存在類TestClass,現在要建立一個數組包含10個TestClass物件,先使用operator new[]操作符進行記憶體塊建立,

void* rawMemory=operator new[ ](10*sizeof(TestClass));

然後定義一個pThis指標指向該記憶體塊,

TestClass* pThis=static_cast<TestClass*>(rawMemeory);

for(int i=0;i<10;i++)

{

  new (&pThis[i]) TestClass(...);
}

注意在使用 Placement new 操作符後,不能簡單的使用delete  [ ] pThis來釋放記憶體,而是要以構造順序反向先進行物件的析構:

for(int i=9;i>=0;i--)

{

pThis[i].~TestClass();
}

最後呼叫operator delete []來進行rawMemory記憶體釋放

operator delete [ ] (rawMemory);