• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++需要返回值的函数却没有返回值的情况单例模式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

昨天在看前些天写的代码,发现一个错误。

 

#include <iostream>
using namespace std;

class singleton
{
public:
	static singleton* sharedInstance()
	{
		if (m_ptr==nullptr)
		{
			m_ptr=new singleton(); 

			//这里没有返回值
		}
		else
		{
			return m_ptr;
		}
	}

	void show(){cout<<"singleton is ok"<<endl;};

private:
	singleton()
	{
	};

	static singleton* m_ptr;
};

singleton* singleton::m_ptr=nullptr;

int main()
{
	
	singleton* p=singleton::sharedInstance();

	p->show();

	getchar();

	return 0;
}


问题在:

 

 

singleton* p=singleton::sharedInstance();


程序运行没有问题,但是事实上

 

 

	static singleton* sharedInstance()
	{
		if (m_ptr==nullptr)
		{
			m_ptr=new singleton(); 

			//这里没有返回值
		}
		else
		{
			return m_ptr;
		}
	}


程序第一次运行的时候函数并没有返回值。

 

但是 p 却获取到了正确的值。。。。。。。

------------------------------------------------------------------------------------------------------------

亮瞎给我解释:

CPU中有个寄存器exa,就是用来存放函数返回值的。

 

m_ptr=new singleton(); 


在new 操作的时候返回了singleton实例的指针。保存到exa中。

 

但是在

 

sharedInstance()


函数中没有返回值,于是这个函数返回了exa中存储的值。。。

 

于是

 

singleton* p=singleton::sharedInstance();


就变成了

 

 

singleton* p=new singleton(); //构造函数是私有的,这里只是这样理解

 

--------------------------------------------------------------------------------------------------------------

这里只是讨论为什么程序没有出错。。。

对于编译器的各种警告,如果可以的话把警告设置成错误吧。。。

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++执行linux系统命令发布时间:2022-07-13
下一篇:
[ACM训练]DEVC++如何处理不能调试发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap