c++ static 类实例 是否调用折构函数?

比如说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;
}

会的,离开作用域就会调用