目录
一、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对应的内存如何释放呢?
- 先释放对象:obj->~A()
- 再析构内存:如果对应内存是堆分配delete []buf;如果对应内存是栈分配无需手动释放