观察下面的代码:
class A
{
public:
A()
{
std::cout << "A构造" << std::endl;
}
~A(){ std::cout << "A析构" << std::endl; }
};
A& getAInstance()
{
static A instance;
return instance;
}
int main()
{
{
getAInstance();
getAInstance();
}
return 0;
}
打印结果:
代码二:
class A
{
public:
A()
{
std::cout << "A构造" << std::endl;
}
~A(){ std::cout << "A析构" << std::endl; }
};
A& getAInstance()
{
static A instance;
return instance;
}
int main()
{
{
auto var1 = getAInstance();
auto var2 = getAInstance();
}
return 0;
}
打印结果:
局部静态变量的声明周期不是进程的生命周期吗?为什么释放了?
静态变量写的单例模式
/* 通过静态变量实现的单例类 */
class Singleton {
private:
/* 让构造函数私有以避免类被实例化 */
Singleton() = delete;
public:
/* 实例对象的唯一访问方式 */
static Singleton* getInstance() {
static Singleton instance; // 静态成员函数里的静态局部变量等效于类的静态成员变量
return &instance;
}
};
注意: 返回的是静态变量的指针