欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

vs2012的c++编译器没调用全局变量的析构函数

更新时间: 2014-05-18 06:20:18 责任编辑: Author_N8

 

VS2012的C++编译器没有调用全局变量的析构函数
class MyClass
{
public:
    MyClass() {cout << "MyClass()" << endl;};
    ~MyClass() {cout << "~MyClass()" << endl;};
protected:
    int _a;
};

MyClass g_MyClass;

int main()
{
    return 0;
}


没有发现析构函数被调用,因为"~MyClass()"字符串没有显示出来。
大人给解释一下,啥情况?
--参考方法--

#include <iostream>
using namespace std;
 
class MyClass
{
public:
    MyClass() {cout << "MyClass()" << endl;};
    ~MyClass() {cout << "~MyClass()" << endl;};
protected:
    int _a;
};
 
MyClass g_MyClass;
 
int main()
{
    return 0;
}


用gcc编译测试会调用析构函数:

MyClass()
~MyClass()

--参考方法--
vs2010 也能显示.
--参考方法--
全局变量析构发生在main函数返回之后
--参考方法--
VS 高版本对程序的优化引起的,这个全局的类变量,在整个主函数中没有被引用过,所以它没有被构造也无析构,等无没有定义这个变量,被优化和谐了,要主函数中对这个类进行一个访问,那么它应当不被优化和谐了,我猜的,是否属实需要验证
--参考方法--
VC71中还有构造和析构的
--参考方法--
表示用VS2010有显示
~MyClass()
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-05-18 06:20:18
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/873910/
本文WWW.DOC100.NET DOC100.NET版权所有。