我搜索了这个问题的答案,却找不到答案。请考虑以下代码:
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
?
我尝试了它并没有收到任何错误,但我想确保一旦程序终止,我就不会导致内存泄漏。
答案 0 :(得分:13)
是的,您当然可以安全地从析构函数中调用非const函数。标准明确允许:
15.4 / 2析构函数用于销毁其类类型的对象。地址 不得采用析构函数。可以为a调用析构函数 const,volatile或const volatile对象。 const和volatile语义 ([dcl.type.cv])不适用于销毁下的对象。他们 当析构函数为派生对象最多时停止生效 启动。