猿问

小弟想问一下为什么全局变量I0没有执行析构函数?

#include <iostream>
#include <string>
using namespace std;
class MyCla1
{
char *str;
public:
MyCla1( char *s );
~MyCla1()
{
cout << "Destructor: Destroying=> " << str << "\n";
delete str;
}
void print()
{
cout<<" --- printed by => "<<str<<endl;
}
};
MyCla1::MyCla1( char *s )
{
cout << "Constructor: Initializing=>" << s << "\n";
str=new char[strlen(s)+1];
strcpy( str, s );
}
MyCla1 I0( "Global I0" );
int main()
{
I0.print();
MyCla1 I1( "Function_Local I1" );
int cond=2;
I1.print();
while(cond)
{
cout << "In block.\n";
MyCla1 I2( "Block_Local I2" );
I2.print();
static MyCla1 I3( "Static I3" );
cond--;
}
cout << "Exited block.\n";
return 0;
}

蛊毒传说
浏览 104回答 2
2回答

SMILET

这个问题挺有意思的。你把cout<<那种输出格式改成printf应该就能看到显示了。事实上是因为C++标准只规定了同一个cpp文件里的全局变量的构造和析构顺序,不同文件间的顺序没有规定。你用的编译器应该是先析构了iostream的cout变量,所以显示不出来了。

哆啦的时光机

析构函数是在该对象被删除的时候才会被调用 。你加一个delete l0;试试
随时随地看视频慕课网APP
我要回答