new operator, operator new, placement new

new operator

new operator是我们常用的new,他执行三个操作

  1. 分配内存:new 操作符首先会根据指定的类型分配足够大小的内存空间,以存储对象的数据成员。
  2. 调用构造函数:new 操作符会在分配的内存空间上调用对象的构造函数,以初始化对象的数据成员。
  3. 返回指针:new 操作符返回一个指向新分配的对象的指针,该指针可以用于访问和操作对象。
    Type* ptr = new Type(args); // 使用 new 操作符创建对象
    可以使用delete来回收这块内存

operator new

operator new通常和placement new搭配使用,他只完成两个动作

  1. 分配内存:operator new 操作符首先会根据指定的类型分配足够大小的内存空间,以存储对象的数据成员。
  2. 返回指针:operator new 操作符返回一个指向新分配的对象的指针,该指针可以用于访问和操作对象。
    Type* ptr = new Type; // 使用 operator new 分配 Type 类型的内存
    可以使用delete来回收内存

placement new

“Placement new” 是另一种在已经分配的内存上构造对象的机制。它使用了定位 new 运算符,将对象构造在预先分配的内存上,而不是分配新的内存。这在某些情况下非常有用,例如需要在特定的内存位置上构造对象,或者在固定的内存缓冲区中管理对象的生命周期。

new (ptr) Type(arguments);  // 将对象构造在 ptr 指向的内存上
使用placement new构造出的对象仅可使用显示调用析构函数的方法来回收该空间
ptr->~Type();  // 手动调用对象的析构函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值