C++ 定位new运算符

定位new运算符,它让你能够指定要使用的位置,可能使用这种特性来设置其内存管理规程,处理需要通过特定地址进行访问的硬件或在特定位置创建对象。

1,头文件<new>

2,将new运算符用于提供了所需地址的参数。

例如:

程序中的buffer是char指针,如果要访问buffer1, buffer2 的地址,需使用(void *)进行强制类型转换。

与常规new运算符不同的是:

1,常规new运算符查找一个新的内存块;但定位new运算符使用传递给它的地址,它不跟踪哪些内存单元已被使用,也不查找未经使用的内存块。

2,对于常规new运算符必须要delete掉,才能再次使用该内存块;buffer指定的是静态内存,而delete只能用于指向常规new运算符分配的堆内存。也就是说,数组buffer位于delete的管辖区域之外。

 

定位new运算符的工作原理:基本上它只是返回传递给它的地址,并将其强制类型转换为(void *),以便能够赋给任何指针类型。C++允许重载定位new运算符。

 

再谈new和delete

如果对象是动态变量,当执行完定义该对象的程序块时,将调用该对象的析构函数。

如果对象是静态变量(外部,静态,静态外部或来自名称空间),则在程序结束时将调用对象的析构函数。

如果对象是用new创建的,只有当显示的使用delete删除对象时,才会调用析构函数。

所以显示地为使用定位new运算符创建的对象调用析构函数。

例如:

对于使用定位new运算符创建的对象,应以与创建顺序相反的顺序进行删除。原因在于,晚创建的对象可能依赖早创建的对象。另外仅当所有对象都被销毁后,才能释放用于存储这些对象的缓冲区。

p2->~just();

p1->~just();

delete [] buffer;

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值