c++ - 是否可以在C++中调用delete时阻止析构函数运行?

标签 c++ memory-management

具体来说,在一个库中,我有一个内存池可以覆盖某些类的 new 和 delete 行为。我希望库的用户能够对这些类的实例调用 delete,但我需要让这些实例保持事件状态,直到稍后执行特定的清理操作。在让用户使用常规的新建/删除操作的同时,这是否完全可行?有什么方法可以覆盖调用析构函数的默认行为?

最佳答案

简短的回答:没有。 调用 delete 总是 触发对析构函数的调用,然后调用 operator delete,与调用 new< 的方式相同 首先调用相应的operator new 然后运行对象的构造函数。 如果您想阻止您的用户破坏对象,您必须以某种方式阻止他们 a) 在原始指针上调用 delete 和 b) 在堆栈上构造它们。

如果你想让实例保持事件状态,这听起来像是想要管理它们的生命周期,所以自然的方法是首先在你的库中创建对象。此外,无论如何,如今在代码中进行简单的 delete 调用被认为是糟糕的风格,因为有可用的智能指针自动执行这些调用。

所以你可以做的是将创建者函数添加到你的库中,它返回某种智能指针。这些可以是 shared_ptrunique_ptr,带有特殊的删除器,它不会真正删除对象,而是将其传回您的库以便稍后清理。

关于c++ - 是否可以在C++中调用delete时阻止析构函数运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304167/

相关文章:

C++ 类型和函数

c++ - 不使用 gcnew 创建 C++/CLI 对象

c++ - 在 C++ 中转换为字符串时限制 float 的小数位

c++ - 如何在场景中绘制文字?

c - realloc - 内存泄漏

C++ vector 内存不足

c++ - 在C++中读写多个文件

c# - 了解内存高效 C# 编程的好网站/博客/书籍

java - 监控应用程序以监控 Java 桌面应用程序的性能

c++ - 删除由两个指针引用的对象指针