为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
蛊毒传说 2022-08-04 11:07:05
#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;}
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

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

查看完整回答
反对 回复 2022-08-08
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

析构函数是在该对象被删除的时候才会被调用 。你加一个delete l0;试试

查看完整回答
反对 回复 2022-08-08
  • 2 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信