1. C++操作符new做了什么?

  1. 分配空间
  2. 类型转换
  3. 成员初始化
void * temp = operator new(sizeof(A));  // 1
try{
    A * ptr = static_cast<A*> temp;     // 2
    ptr->A();                           // 3
    return ptr;
}
catch(...){
    operator delete(ptr);
    throw ...;
}
  1. 成员初始化

2. C++操作符delete做了什么?

  1. 调用析构函数
  2. 释放ptr指针的空间
if (ptr != nullptr)
{
    ptr->~A();                     // 1
    operator delete(ptr);          // 2
}

results matching ""

    No results matching ""