可能是重复问题:
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
,因为将调用默认复制构造函数。现在当执行
main
完成时,在a1、a2和a3被销毁后,静态成员counter
的值将为-1
,然后将调用析构函数,打印出这个值(-1
)。我的问题是,当调用
message
析构函数时,我们如何知道静态成员counter
仍然存在并可用。另外,如果我改变静态/全局对象/变量的定义顺序,即先定义
message
,那么该值仍为-1
。总之,无论我做了什么更改,当程序终止时,消息析构函数都能成功访问静态成员变量
counter
,我不明白为什么会这样。据我所知,如果全局对象message
首先被定义,那么它的析构函数将最后被调用,因此counter
值将对其析构函数不可用。提前感谢! Guy