【发布时间】:2014-08-19 18:09:28
【问题描述】:
具体来说,在一个库中,我有一个内存池,它覆盖了某些类的 new 和 delete 行为。我希望库的用户能够对这些类的实例调用 delete,但我需要保持实例处于活动状态,直到稍后执行特定的清理操作。在让用户使用常规的 new/delete 时,这是否可能?有什么方法可以覆盖调用析构函数的默认行为?
【问题讨论】:
-
@blgt
operator delete是用于内存释放的函数和delete运算符之间存在差异,delete是由编译器翻译成“析构函数调用和通过 @ 释放内存”的特殊关键字987654323@"。所以重载函数不会阻止编译器调用析构函数。 -
@ArneMertz 是的,我没有仔细阅读这个问题,这很糟糕
-
如果你能控制这些类,我最想不到的是使用 CRTP+非虚拟析构函数的组合来实现你想要的,并从基础上做你需要的所有清理班级。不知道我是否正确理解了这个问题。
-
只需为您的对象实施析构函数,以便在您的清理操作发生之前不删除资源
-
@EdChum,这将保留对象的资源,但不会保留对象本身。当它的析构函数运行时,对象的生命周期仍将结束,从而未定义对其的任何使用。从这个问题中不清楚这是否足以解决问题,“我需要让实例保持活动状态”意味着它不是。
标签: c++ memory-management