定位new

在c++中使用new表达式时实际是执行了3步

  1. new表达式调用一个名为 operator new(或者 operator new[])的标准库函数。该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或者对象数组)
  2. 编译器运行相应的构造函数以构造这些对象,并为其传入初始值
  3. 对象被分配了空间并构造完成,返回一个只想该对象的指针

使用delete表达式时实际执行了2步

  1. 对指针所指向的对象或数组中的元素执行对应的析构函数
  2. 编译器调用名为 operator delete(或者 operator delete[])的标准库函数释放内存空间

可以重载 operator new 和 operator delete 以达到控制内存分配的过程,但

void operator new(size_t, void*);

是不允许重载的,只供标准库使用。(以上参考自c++ primer)

你可能感兴趣的:(定位new)