可能重复:
C++ 中的对象破坏
假设我们有两个类,一个被调用Array
,另一个被调用MessageOnExit
。
假设Array
该类有一个名为 的静态数据成员counter
。
以下是课程:
class Array {
public:
static int counter;
Array(){counter++;}
~Array(){counter--;}
};
class MessageOnExit {
public:
~MessageOnExit(){cout << Array::counter;}
};
以下是使用这些类的“主要” :
// static variable definition
int Array::counter;
// global object definition
MessageOnExit message;
void main() {
Array a1, a2;
Array a3(a1);
}
前两个声明将更改为counter
2,然后调用 Empty/Default 构造函数第三个声明不会更改,counter
因为将调用 Default 复制构造函数。
现在当main
执行完成时,静态成员的值counter
将-1
跟随析构函数调用(在 a1、a2 和 a3 被销毁之后),然后message
将调用析构函数,打印该值(-1
)。
我的问题是我们如何知道在调用析构函数counter
时静态成员仍然存在并且可用。message
此外,如果我更改静态/全局对象/变量定义顺序,即message
定义为 before counter
,则值保持为-1
。
总而言之,无论我做什么更改,当程序终止消息析构函数成功访问静态成员时counter
,我不明白为什么会这样。据我了解,如果message
首先定义全局对象,则其析构函数将最后调用,因此该counter
值将不可用于其析构函数。
提前致谢!盖伊