C++ 的 new 和 delete
看到 More Effective C++ 条款8 有感,记录一下以便后续忘了。
1. new operator
就是我们最常用的 new
运算符,它有两阶段,首先分配空间,然后调用构造函数。
不可更改,内置于C++语言中。
例子:
string *ptr = new string("Harry Potter");
2. operator new
只分配内存,而不调用构造函数。可以被重载,但是第一个参数必须是 size_t 表示内存大小。
例子:
// 函数原型:
void *operator new(size_t size);
void *rawMem = operator new (sizeof(string));
3. placement new
在指定内存区域上调用指定类的构造函数。这个函数不负责内存分配。当初在写 ustl 的 Allocator 用到过,就是先调用 allocate 模块分配内存,再用 construct 在内存上创建对象,construct 对象实际就是调用的 placement new。
其实我感觉 operator new 就是连续调用的 new operator 和 placement new,当然还没有看过有文章具体这样说了,纯属臆测。
例子:
new (rawMem) String("Harry Potter");