gpt4 book ai didi

c++ - 为什么销毁顺序与构造顺序相同,静态对象(C++)?

转载 作者:行者123 更新时间:2023-12-05 08:48:35 25 4
gpt4 key购买 nike

代码是:

#include <iostream>
using namespace std;

class A
{
public:
A() { cout << "A::A" << endl; }
~A() { cout << "A::~" << endl; }
};

class B
{
public:
B() { cout << "B::B" << endl; }
~B() { cout << "B::~" << endl; }
};

int main()
{
B b;
static A a;
return 0;
}

输出是:

B::B
A::A
B::~
A::~

非静态对象 b 的范围和静态对象 a 的范围在 main() 函数结束时结束。

问题:为什么构造函数的顺序和析构函数的顺序一样?

最佳答案

Static local variables将在程序退出时销毁。

The destructor for a block-scope static variable is called at program exit, but only if the initialization took place successfully.

所以b会在main()结束时先被销毁,a会在这之后被销毁。

对于初始化,

are initialized the first time control passes through their declaration

所以b会在main()中先被初始化,然后a被初始化。

关于c++ - 为什么销毁顺序与构造顺序相同,静态对象(C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65731770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com