C++ new关键字的一些特殊用法

placement new

i.普通的new关键字申请内存空间时,是从系统的堆中分配的空间,申请所得到的空间的位置是根据当时的内存的实际使用情况来决定的。
ii.placement new就是特殊情况下,需要在指定的特定内存去创建对象,就是定位放置new操作
iii.用法: Test* test = new(ptr) Test; 上述 ptr 就是指定内存首地址位置
iv.定位new操作,既可以是栈上,也可以是堆上
v.使用定位new定位生成对象时,会自动调用类Test的构造函数,但是由于对象的空间不会自动释放(因为实际上只是借用了别人的空间),所以必须显式调用类的析构函数,test->~Test();
vi.不到万不得已不要使用placement new,通常用于需要对内存布局进行精细控制的场合,例如嵌入式编程或自定义内存管理策略

new nothrow

内存耗尽时使用new会抛出异常ball_alloc,可以使用: Test* test = new(nothrow) Test; 的方式阻止抛出异常,但是记得对test判空。

new的内置类型初始化

对于内置类型,值初始化的内置类型对象有着良好定义的值,而默认初始化的对象的值是未定义的。所以推荐对于内置类型,使用以下方式进行动态内存的创建:int* i = new int(); int后面加括号,自动初始化为默认值0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值