比如说static MyClass myclass;
myclass的折构函数会不会被调用?
静态变量的作用域是整个程序的生存时间,所以就算调用类的析构函数,也是在应用退出时。
你可以增加 LOG 看看在程序退出时,类的析构函数会不会被调用:即有没有增加的 LOG 输出。应该是有的。
会调用,但是可能不会再控制台输出
在VC++中编写如下代码:
#include <iostream>
using namespace std;
class A
{
public:
~A() { cout << "~A" << endl; }
};
static A a;
int main(int argc, char* argv[])
{
return 0;
}
在 ~A() { cout << "~A" << endl; }上点右键,选择添加断点
按f5或者“开始调试”。
程序会停在这一行。说明它的确是执行了的。但是此时控制台已经销毁,所以没有输出。
注意看红色圆圈中的黄色箭头。
static用在类对象前面和用在普通变量前的作用是一样的。
static有两种用途,可参考:
http://blog.csdn.net/qq_27183003/article/details/49886843
析构函数会被调用。
#include <iostream>
using namespace std;
class A
{
public:
A(){ cout<<"A"<<endl; }
~A() { cout << "~A" << endl; }
};
void fun()
{
static A a;
}
int main(int argc, char* argv[])
{
fun();
fun();
fun();
return 0;
}
会的,离开作用域就会调用