最近在重新看Effective C++这本书,看到new和delete这部分。
(这里的new/delete用法对于写自己的自制STL中的空间配置器也有帮助,allocator就是将new和delete的工作分开完成的,分别是 1. 是先分配内存,再初始化对象,2. 先调用对象的析构函数,在释放掉内存)
在这里简单记录一下,方便以后查看。
new/delete/new[]/delete[] operator operator new/delete/new[]/delete[] placement new/new[] // 注意,没有 placement delete/delete[]使用方法如下代码:
Class *pc = new Class; // ... delete pc;第一行代码是new操作符,第三行代码时delete操作符
编译器会将上述代码做些额外工作,如下:
void *p = operator new(sizeof(Class)); // 对p指向的内存调用Class的构造函数,此处无法用直观的代码展现 Class *pc = static_cast<Class*>(p); // ... pc->~Class(); operator delete(pc);代码中第一行就是**operator new**,最后一行就是**operator delete**。总结一下,new操作符实际上做了两件事
1. 调用operator new 分配内存
2. 在分配好的内存上初始化对象,并返回该对象的指针。
与new操作符类似,delete操作符会先调用对象的析构函数,然后在调用operator delete释放内存。
相关连接:
参考了这篇博文:https://kelvinh.github.io/blog/2014/04/19/research-on-operator-new-and-delete/
wiki:https://zh.wikipedia.org/wiki/New_(C%2B%2B)