正如本网站所引用的...
http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10
但是我没有找到原因,为什么我们要明确调用desturctor?

最佳答案

您可以将其视为对 delete 的调用,但由于您使用了 Placement new,您不想使用 delete,因为这会尝试释放内存。如果你想自动调用它,你可以使用 RAII :

// Could use a templated version, or find an existing impl somewhere:
void destroy_fred(Fred* f) {
   f->~Fred();
}

void someCode()
{
   char memory[sizeof(Fred)];
   void* p = memory;
   boost::shared_ptr<Fred> f(new(p) Fred(), destroy_fred);

   // ...

   // No need for an explicit destructor, cleaned up even during an exception
}

关于c++ - 为什么析构函数没有在新的放置中隐式调用”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1022320/

10-10 16:29