我搜索了此问题的答案,但找不到。考虑以下代码:
struct Foo
{
int *bar;
Foo(int barValue) : bar(new int(barValue)) {}
~Foo() { do_this(); }
void do_this() { delete bar; bar = nullptr; }
};
int main()
{
const Foo foo(7);
}
do_this()
不能在const
对象上调用,所以我不能做类似的事情foo.do_this()
。在某些情况下do_this()
,在析构函数之外进行调用也很有意义,这就是为什么我不想在析构函数定义中简单地包含代码。由于do_this()
修改了成员变量,因此无法将其声明为const
。
我的问题是:将析构函数可以调用do_this()
一个在const
当对象被销毁的对象?
我尝试了一下,没有收到任何错误,但是我想确保一旦程序终止,我不会造成内存泄漏。
是的,您当然可以从析构函数中安全地调用非const函数。标准明确允许:
15.4 / 2析构函数用于销毁其类类型的对象。不得使用析构函数的地址。可以为const,volatile或const volatile对象调用析构函数。const和volatile语义([dcl.type.cv])不会应用于被破坏的对象。当大多数派生对象的析构函数启动时,它们停止生效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句