相关疑难解决方法(0)

C++是否为全局和类静态变量调用析构函数?

从我的示例程序看,在两种情况下看起来都会调用析构函数.它在什么时候调用全局变量和类静态变量的析构函数,因为它们应该在程序堆栈的数据部分中分配?

c++ destructor global-variables

50
推荐指数
2
解决办法
4万
查看次数

全局对象和静态变量之间的破坏顺序是什么?

可能重复:
C++中的对象销毁

假设我们有两个类,一个被调用Array,另一个被调用MessageOnExit.

假设Array该类有一个名为的静态数据成员counter.

以下是课程:

class Array {
public:
    static int counter;
    Array(){counter++;}
    ~Array(){counter--;}
};

class MessageOnExit {
public:
    ~MessageOnExit(){cout << Array::counter;}
};
Run Code Online (Sandbox Code Playgroud)

以下是使用这些类的"主要":

// static variable definition
int Array::counter;
// global object definition
MessageOnExit message;

void main() {
    Array a1, a2;
    Array a3(a1);
}
Run Code Online (Sandbox Code Playgroud)

前两个声明将更改为counter2,然后两次调用Empty/Default构造函数.第三个声明不会更改,counter因为将调用Default复制构造函数.

现在main执行完成后,静态成员的值counter-1随后是析构函数调用(在a1,a2和a3被去除后),然后message将调用析构函数,打印此值(-1).

我的问题是counter,当message调用析构函数时,我们如何知道静态成员仍然存在且可用.

此外,如果我更改静态/全局对象/变量定义顺序,即message之前定义counter …

c++

4
推荐指数
1
解决办法
2577
查看次数

标签 统计

c++ ×2

destructor ×1

global-variables ×1