VS2012的C++编译器没有调用全局变量的析构函数

时间:2021-01-03 08:57:23
class MyClass
{
public:
    MyClass() {cout << "MyClass()" << endl;};
    ~MyClass() {cout << "~MyClass()" << endl;};
protected:
    int _a;
};

MyClass g_MyClass;

int main()
{
    return 0;
}


没有发现析构函数被调用,因为"~MyClass()"字符串没有显示出来。
大人给解释一下,啥情况? VS2012的C++编译器没有调用全局变量的析构函数

9 个解决方案

#1



#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()

#2


vs2010 也能显示.

#3


全局变量析构发生在main函数返回之后

#4


VS 高版本对程序的优化引起的,这个全局的类变量,在整个主函数中没有被引用过,所以它没有被构造也无析构,等无没有定义这个变量,被优化和谐了,要主函数中对这个类进行一个访问,那么它应当不被优化和谐了,我猜的,是否属实需要验证

#5


VC71中还有构造和析构的

#6


表示用VS2010有显示
~MyClass()

#7


引用 4 楼 h_w_m 的回复:
VS 高版本对程序的优化引起的,这个全局的类变量,在整个主函数中没有被引用过,所以它没有被构造也无析构,等无没有定义这个变量,被优化和谐了,要主函数中对这个类进行一个访问,那么它应当不被优化和谐了,我猜的,是否属实需要验证

即便没有在main函数中使用该全局变量的任何成员,该变量仍然被创建,因为有构造函数被调用。
实际情况是,在main函数中使用该全局变量,仍然不能看到析构函数被调用的字符串。

#8


哎呀我去~~
main函数最底下,还有一个
int a;
cin >> a;

导致,执行到此,main函数暂时被中断,所以没有看到析构函数被调用。

#9


同上,在VS2012中编写析构函数发现没有被调用。正在寻求解决办法。

#1



#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()

#2


vs2010 也能显示.

#3


全局变量析构发生在main函数返回之后

#4


VS 高版本对程序的优化引起的,这个全局的类变量,在整个主函数中没有被引用过,所以它没有被构造也无析构,等无没有定义这个变量,被优化和谐了,要主函数中对这个类进行一个访问,那么它应当不被优化和谐了,我猜的,是否属实需要验证

#5


VC71中还有构造和析构的

#6


表示用VS2010有显示
~MyClass()

#7


引用 4 楼 h_w_m 的回复:
VS 高版本对程序的优化引起的,这个全局的类变量,在整个主函数中没有被引用过,所以它没有被构造也无析构,等无没有定义这个变量,被优化和谐了,要主函数中对这个类进行一个访问,那么它应当不被优化和谐了,我猜的,是否属实需要验证

即便没有在main函数中使用该全局变量的任何成员,该变量仍然被创建,因为有构造函数被调用。
实际情况是,在main函数中使用该全局变量,仍然不能看到析构函数被调用的字符串。

#8


哎呀我去~~
main函数最底下,还有一个
int a;
cin >> a;

导致,执行到此,main函数暂时被中断,所以没有看到析构函数被调用。

#9


同上,在VS2012中编写析构函数发现没有被调用。正在寻求解决办法。