在c++中使用new表达式时实际是执行了3步
- new表达式调用一个名为 operator new(或者 operator new[])的标准库函数。该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或者对象数组)
- 编译器运行相应的构造函数以构造这些对象,并为其传入初始值
- 对象被分配了空间并构造完成,返回一个只想该对象的指针
使用delete表达式时实际执行了2步
- 对指针所指向的对象或数组中的元素执行对应的析构函数
- 编译器调用名为 operator delete(或者 operator delete[])的标准库函数释放内存空间
可以重载 operator new 和 operator delete 以达到控制内存分配的过程,但
void operator new(size_t, void*);
是不允许重载的,只供标准库使用。(以上参考自c++ primer)
网友评论