C++ 构造函数与析构函数详解(三)---局部静态存储 局部static

对于局部静态对象而言,构造函数是在控制线程第一次通过该对象的定义时调用。

下面看如下示例:

#include<iostream>
using namespace std;

class Test
{
public:
	Test(){cout << "调用默认构造函数"<<endl;};
	~Test(){cout << "调用析构函数~" <<endl;}
};

void f(int n)
{
    static Test t1;
	if(n)
	{
		static Test t2;
	}

}

int main()
{
	cout << "f(2):"<<endl;
	f(2);
	cout << "f(0):"<<endl;
	f(0);
	cout << "f(1):"<<endl;
	f(1);
	cout << "f(3):"<<endl;
	f(3);
	system("pause");
	return 0;
}

在这里,f(2)第一次调用时将为t1,t2(按此顺序)分别调用一次构造函数。因为t1,t2被声明为static,在f(2)返回时并不被销毁,而且在f(0),f(1),f(3)再次调用时也不会再次构造它。

在程序结束时,局部静态对象的析构函数将按照他们被构造的相反顺序逐一调用,并没有规定析构调用的确切时间。

以上代码运行结果:

f(2):
调用默认构造函数
调用默认构造函数
f(0):
f(1):
f(3):
请按任意键继续...





参考资料:C++程序设计语言 (C++之父)












你可能感兴趣的:(C++ 构造函数与析构函数详解(三)---局部静态存储 局部static)