C++中placement new操作符的使用
阿新 • • 發佈:2019-02-02
一般在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);