如下程序,是一个单例模式(我确定),这时我问自己,那么是怎么保证每次GetInstance返回的地址都是一样的呢。程序如下:
# include<iostream>
using namespace std;
class Single
{
public:
static Single* GetInstance()
{
static Single single;
return &single;
}
private:
Single() { cout << "Construct Single" << endl; }
~Single() { cout << "Delete Single" << endl; }
Single(const Single& sing);
};
int main()
{
Single* p1 = Single::GetInstance();
Single* p2 = Single::GetInstance();
Single* p3 = Single::GetInstance();
cout << p1 << endl;
cout << p2 << endl;
cout << p3 << endl;
return 0;
}
打印如下:
这里需要普及一点静态变量的知识:
由于single被声明为static,因此在GetInstance反复调用的过程中,它指向的地址是不变的。同时静态变量初始化只进行一次。
后面再来谈谈另一个问题,假如我们在一个循环中,定义了一个静态局部变量并进行初始化,循环过程中,编译器怎么知道当前的静态局部变量已经初始化过了呢?
带着这个问题:我给大家推荐了一篇文章,解释的非常详细:
https://www.cnblogs.com/novice-dxx/p/7094690.html