繁体   English   中英

C ++中的销毁顺序

[英]Destruction order in C++

#include <iostream>
class X{
public:
    X(int n = 0) : n(n) {}
    ~X() {std::cout << n;}
    int n;
};
void main()
{
    X a(1);
    const X b(2);
    static X c(3);
}

输出是213 ,我认为析构函数使用LIPO堆栈,那么为什么它不以相反的顺序析构321

我很困惑,我想了解更多。 非常感谢。

ab具有自动持续时间,在块结束时销毁。 c是静态持续时间,在程序终止时销毁。 LIFO命令仅适用于在程序中同一点销毁的对象。

它以相反的顺序调用析构函数,但是静态变量具有不同的生存期。

请参见C ++是否为全局和类静态变量调用析构函数? 这说明具有全局寿命的变量在main返回之后的某个时间被破坏。

那就是LIFO。 main返回时, ab以相反的顺序被破坏,在main返回和程序实际退出之间的某个不确定的点, c被破坏(因为它是静态的,与程序的生命周期相关,而不是main本身)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM