C/C++静态变量盲区(鲜有人知道)||静态变量的地址为什么能保持不变

如下程序,是一个单例模式(我确定),这时我问自己,那么是怎么保证每次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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值