1.问题
在学习构造函数和析构函数时,发现自己编写的简单例子没有显示调用析构函数的结果
class person{
public:
person(){
cout<<"111"<<endl;
}
~person(){
cout<<"222"<<endl;
}
};
int main(){
person p1;
person p2;
system("pause");
return 0;
}
2.原因
经过查阅网站资料以及大佬们以前的问题,发现是因为原因是vscode在main函数中添加了代码 system(“pause”);这句代码是用来防止程序一闪而过的,到了这句代码程序本身其实并没有全部执行完毕,类中的析构函数也就没有被调用,析构函数的作用:对象消亡时,自动被调用,用来释放对象占用的空间。在return 0;被执行前,p1p2对象仍然存在,没有消亡。此时执行system("pause");将程序暂停,自然看不到析构函数起作用,当你按下任意键后,程序继续向下执行return 0;,此时主程序结束,对象消亡,析构函数被调用,但是此时屏幕已经关闭,也就没法看到析构函数被调用。
3.解决方法
将system(“pause”);这句代码添加到析构函数中
class person{
public:
person(){
cout<<"111"<<endl;
}
~person(){
cout<<"222"<<endl;
system("pause");
}
};
int main(){
person p1;
return 0;
}
即可显示调用析构函数的结果。
Visual Studio 执行C++程序时析构函数不调用_XK_.xk的博客-优快云博客_析构函数不调用
C++为什么相同的代码在VS里面可以看见析构函数,而在vscode里面看不到析构函数?_NINE_world的博客-优快云博客