析构函数是否可以在 const 对象上调用非 const 函数
Can a destructor call a non-const function on a const object?
我搜索了这个问题的答案,但找不到。请考虑以下代码:
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
.
我的问题是:当const
对象被销毁时,析构函数是否能够调用do_this()
?
尝试了它并且没有收到任何错误,但我想确保一旦我的程序终止,我就不会导致内存泄漏。
是的,您当然可以安全地从析构函数调用非常量函数。标准明确允许这样做:
15.4/2 析构函数用于销毁其类类型的对象。地址 不得采取析构函数。可以为 常量、挥发性或常量挥发性物体。常量和易失性语义 ([dcl.type.cv]( 不适用于正在销毁的物体。他们 当派生最多的对象的析构函数停止生效 开始。
相关文章:
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 使用共享指针的函数调用,其对象应为 const
- 如何从构造函数副本 T(const T&)调用对象 T?
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- 不允许运算符 const 参数调用 const 成员函数
- "No-Const Pointer to Const "调用功能
- 在字符串函数中抛出'char const*'实例后调用的终止
- 调用'myStud::myStud(int, const char [5], int, int, int)'没有匹配函数
- 为什么我的编译器在调用 const getter 函数时抛出"转换丢失(const)限定符"错误?
- test1.cpp:9:77:错误:对"(const std::normal_distribution) <double>(std::mt19937&)"的调用不匹配
- 为什么我可以调用一个从const方法更改成员的方法
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 如何在单个模板调用中传递const_iterator和非const迭代器
- 在循环条件中调用const vector size()似乎缺少优化
- C++通过 const 引用传递时不调用派生类函数
- 当我调用 main 中使用 const 对象的 const 函数时,不断出现错误
- 非常量调用 const 成员函数失败,只读位置C++
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 使用"const&"调用模板?
- Const调用操作符调用绑定的非Const成员函数