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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值