C++ new操作符实现

目录

 

一、new操作符

二、operator new

三、placement new


一、new操作符

C++中new操作符是语言内置的,不能被重载,实现了两个功能:内存分配、调用对象构造函数。其中内存分配调用标准函数operator new,声明如下:

void * operator new(size_t size);

释放内存时使用delete运算符,底层会调用标准函数operator delete来释放内存。

二、operator new

返回一个未初始化的地址,其中size来确定分配多少内存。new操作符类似于实现了如下功能:

void *memory = operator new(sizeof(object));
object obj() on memory;

即operator new用来分配内存,而且可以被重载。对应释放内存函数为operator delete。

三、placement new

placement new使用如下:

class A {
public:
    int a;
};
char *buf = new char[sizeof(A) + sizeof(int)]; // 堆分配
// 或 char buf[sizeof(A) + sizeof(int)];       // 栈分配
A *obj = new(buf) A();

从实例中我们可以看到placement new是在一个已经分配好的内存中(栈或者堆中)构造一个新的对象。

那placement new对应的内存如何释放呢?

  1. 先释放对象:obj->~A()
  2. 再析构内存:如果对应内存是堆分配delete []buf;如果对应内存是栈分配无需手动释放
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值