可能重复:
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);
}
前两个声明将更改为counter2,然后调用 Empty/Default 构造函数第三个声明不会更改,counter因为将调用 Default 复制构造函数。
现在当main执行完成时,静态成员的值counter将-1跟随析构函数调用(在 a1、a2 和 a3 被销毁之后),然后message将调用析构函数,打印该值(-1)。
我的问题是我们如何知道在调用析构函数counter时静态成员仍然存在并且可用。message
此外,如果我更改静态/全局对象/变量定义顺序,即message定义为 before counter,则值保持为-1。
总而言之,无论我做什么更改,当程序终止消息析构函数成功访问静态成员时counter,我不明白为什么会这样。据我了解,如果message首先定义全局对象,则其析构函数将最后调用,因此该counter值将不可用于其析构函数。
提前致谢!盖伊