具体来说,在一个库中,我有一个内存池可以覆盖某些类的 new 和 delete 行为。我希望库的用户能够对这些类的实例调用 delete,但我需要让这些实例保持事件状态,直到稍后执行特定的清理操作。在让用户使用常规的新建/删除操作的同时,这是否完全可行?有什么方法可以覆盖调用析构函数的默认行为?
最佳答案
简短的回答:没有。
调用 delete
总是 触发对析构函数的调用,然后调用 operator delete
,与调用 new< 的方式相同
首先调用相应的operator new
然后运行对象的构造函数。
如果您想阻止您的用户破坏对象,您必须以某种方式阻止他们 a) 在原始指针上调用 delete 和 b) 在堆栈上构造它们。
如果你想让实例保持事件状态,这听起来像是你想要管理它们的生命周期,所以自然的方法是首先在你的库中创建对象。此外,无论如何,如今在代码中进行简单的 delete
调用被认为是糟糕的风格,因为有可用的智能指针自动执行这些调用。
所以你可以做的是将创建者函数添加到你的库中,它返回某种智能指针。这些可以是 shared_ptr
或 unique_ptr
,带有特殊的删除器,它不会真正删除对象,而是将其传回您的库以便稍后清理。
关于c++ - 是否可以在C++中调用delete时阻止析构函数运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304167/