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