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");

posted on 2018-09-16 21:59  daghlny  阅读(148)  评论(0编辑  收藏  举报

导航