C++单例问题请教

冷风1023 2018-05-08 07:27:35
class A{
private:
A(){}
public:
~A(){}
static A *getInstance();
};
A *A::getInstance()
{
static A a;
return &a;
}

int main()
{
cout << A::getInstance() << endl;
cout << A::getInstance() << endl;
return 0;
}



程序两次打印地址都是一样的,符合单例特性,但我不明白的是实例函数两次调用为什么会有一样的结果呢?static A a;这句我理解的是应该各自定义不同的变量啊。
...全文
225 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
冷风1023 2018-05-09
  • 打赏
  • 举报
回复
这么一举例我就明白了,刚从C转到C++,有些不理解,谢谢啊。
paschen 版主 2018-05-08
  • 打赏
  • 举报
回复
所有对象共享静态成员变量,而不是每个对象有一份
幻夢之葉 2018-05-08
  • 打赏
  • 举报
回复
全局静态变量,程序启动就初始化了!局部静态变量,在程序第一次执行到的时候初始化,之后的执行将会跳过它的初始化
qq_40162781 2018-05-08
  • 打赏
  • 举报
回复
int fun() { static int i=1; i++; return i; } 调用两次fun,i的值是3,静态是从定义到程序结束一直存在的,要不然定义静态有什么用。i又被重新定义不跟普通的自动变量一样吗
冷风1023 2018-05-08
  • 打赏
  • 举报
回复
静态成员函数只定义一次 这个我是知道的,但函数里面 static A a;这个为什么第二次就不定义了呢?
qq_40162781 2018-05-08
  • 打赏
  • 举报
回复
而且静态局部变量放在普通函数里,也是只定义一次
qq_40162781 2018-05-08
  • 打赏
  • 举报
回复
静态成员函数只定义一次
冷风1023 2018-05-08
  • 打赏
  • 举报
回复
我加了打印在构造函数里,发现第二次A::getInstance()没有调用构造函数,这是为什么呢?大拿给小白解释下吧。

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧