class MyClass
{
public:
MyClass() {cout << "MyClass()" << endl;};
~MyClass() {cout << "~MyClass()" << endl;};
protected:
int _a;
};
MyClass g_MyClass;
int main()
{
return 0;
}
没有发现析构函数被调用,因为"~MyClass()"字符串没有显示出来。
大人给解释一下,啥情况?
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
即便没有在main函数中使用该全局变量的任何成员,该变量仍然被创建,因为有构造函数被调用。
实际情况是,在main函数中使用该全局变量,仍然不能看到析构函数被调用的字符串。
#8
哎呀我去~~
main函数最底下,还有一个
导致,执行到此,main函数暂时被中断,所以没有看到析构函数被调用。
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
即便没有在main函数中使用该全局变量的任何成员,该变量仍然被创建,因为有构造函数被调用。
实际情况是,在main函数中使用该全局变量,仍然不能看到析构函数被调用的字符串。
#8
哎呀我去~~
main函数最底下,还有一个
导致,执行到此,main函数暂时被中断,所以没有看到析构函数被调用。
main函数最底下,还有一个
int a;
cin >> a;
导致,执行到此,main函数暂时被中断,所以没有看到析构函数被调用。
#9
同上,在VS2012中编写析构函数发现没有被调用。正在寻求解决办法。