定位new——placement new

本文介绍了C++中的placement new,这是一种在指定内存上创建对象的技术,有助于避免大内存申请失败和提高效率。内容包括缓冲内存的创建(栈区、堆区、地址转换),对象的创建、析构和缓冲内存的释放。示例代码和注意事项(如不能在static内存上使用placement new)也一并给出。
摘要由CSDN通过智能技术生成

前言

    placement new是用来在指定的内存上创建对象,而不是直接在堆栈上创建对象。好处就字然不用多说,一方面避免了大内存申请失败的情况,另一方面对那些效率要求严格的场景也有了改善

正文

   既然是在指定的内存上创建对象,那么这块内存又是如何被创建出来的?我们来看这块缓冲内存的创建方式

缓冲内存的创建方式

   *栈区. class CTest; char szBuff[ N * sizeof(CTest) ];

   *堆区. char *pBuff = new [ N * sizeof(CTest) ]; 请注意auto或者static内存并非都正确地为每一个对象类型排列,所以,你将不能以placement new使用它们 (1)

   *直接使用地址转换(确保地址是合法有效的). void *pBuff = reinterpre_cast(0x345678);

 

 把缓冲区内存创建完毕后,我们就在这段内存上创建对象

 对象的创建

   CTest *pTest = new(pBuff) CTest;

  创建完成后就可以按照普通的类对象使用它,如pClass->printObjectName();

对象的析构

  析构的时候有点不同,需要如此析构:pTest->~CTest(); 这样表示调用外在的析构函数

缓冲内存的释放

  使用完这块缓冲内存后,释放时delete pB

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值