0
点赞
收藏
分享

微信扫一扫

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

M4Y 04-10 14:30 阅读 2

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

举报

相关推荐

0 条评论