关于C++静态对象的析构函数调用顺序的有关问题?请指点
关于C++静态对象的析构函数调用顺序的问题?请大虾指点!
#include <fstream.h>
ofstream out("statdest.out");
class obj
{
char c;
public:
obj(char C):c(C)
{
out<<"obj::obj() for "<<c<<endl;
}
~obj()
{
out<<"obj::~obj() for "<<c<<endl;
}
};
obj A('A');
void f()
{
static obj('B');
}
int main()
{
out<<"inside main()"<<endl;
f();
out<<"leaving main()"<<endl;
return 0;
}
以上代码通过VC6.0编译执行结果,在statdest.out文件中如下:
obj::obj() for A
inside main()
obj::obj() for B
obj::~obj() for B
leaving main()
obj::~obj() for A
按道理,静态对象的析构函数应该在退出main函数以后再执行呀!
而这里是在退出main函数之前就执行了函数f()内的析构函数,请高手指点,谢谢!
------解决方案--------------------
static obj( 'B ');
是一个临时变量,所以生成后马上销毁。
改成一下形式,才是真正的静态变量。
static obj b( 'B ');
#include <fstream.h>
ofstream out("statdest.out");
class obj
{
char c;
public:
obj(char C):c(C)
{
out<<"obj::obj() for "<<c<<endl;
}
~obj()
{
out<<"obj::~obj() for "<<c<<endl;
}
};
obj A('A');
void f()
{
static obj('B');
}
int main()
{
out<<"inside main()"<<endl;
f();
out<<"leaving main()"<<endl;
return 0;
}
以上代码通过VC6.0编译执行结果,在statdest.out文件中如下:
obj::obj() for A
inside main()
obj::obj() for B
obj::~obj() for B
leaving main()
obj::~obj() for A
按道理,静态对象的析构函数应该在退出main函数以后再执行呀!
而这里是在退出main函数之前就执行了函数f()内的析构函数,请高手指点,谢谢!
------解决方案--------------------
static obj( 'B ');
是一个临时变量,所以生成后马上销毁。
改成一下形式,才是真正的静态变量。
static obj b( 'B ');