一般在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);