在析构函数运行期间不破坏对象是否可能?

4

如果我重写类的析构函数,是否可以在其中添加一些检查,以确定该实例是否应该被销毁或发送到池中?我想使对象易于重用,用户只需释放它(或将其留给编译器),析构函数将检查其是否可重用。

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

3
或许你应该考虑使用像是带有自定义删除器的智能指针。 - Fred Larson
你想要重复使用对象本身,还是仅仅是对象所占用的内存/空间? - Oliver Charlesworth
我想要重复使用这个对象。 - Nezquick
请查看 引用计数std::shared_ptr - jliv902
2个回答

4

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

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


0
当然不行 - 你也没有对象的引用 - 那么你怎么回收该对象呢?
因此解决这个问题,你就有了解决方案。使用智能指针并将引用存储在实际需要它的位置,例如在映射中或由另一个对象拥有(例如,现在看起来更像是 Java 解决方案),或在准备好时手动删除它(这不太智能)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接