频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
C++ 需要返回值的函数却没有返回值的情况 单例模式
2013-12-12 14:21:57         来源:孤独咕嘟  
收藏   我要投稿

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

#include 
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"<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(); //构造函数是私有的,这里只是这样理解

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

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

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

点击复制链接 与好友分享!回本站首页
上一篇:折半查询(二分搜寻法)
下一篇:C++并发实战10:lock granularity
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站