是否可以在析构函数运行时不销毁 obj



如果我覆盖类的析构函数,是否可以在其中进行一些检查,是否应该杀死该实例或将其发送到池中?我想简化重用 obj,用户只需要释放它(或留给编译器),析构函数会检查它是否可以重用。

ReusableClass::~ReusableClass() {
  if (x == 1) {
    // abort destructor, send to pool
  }
}

一旦对象的析构函数开始运行该对象,该对象就被视为死亡: 12.4 [class.dtor] 第14段:

一旦为对象调用析构函数,该对象就不再存在;

当然不是 - 你也不会引用对象 - 那你怎么能回收对象呢?

所以解决了这个问题,你就会有解决方案。使用智能指针并将引用存储在您实际需要它的任何位置,可能是在映射中或由另一个对象拥有(例如,现在看起来更像是 Java 解决方案),或者在准备就绪时手动删除它(这不太智能)。

最新更新