您的位置:首页 > 编程语言 > C语言/C++

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

2013-12-12 11:46 288 查看
昨天在看前些天写的代码,发现一个错误。

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

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

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

对于编译器的各种警告,如果可以的话把警告设置成错误吧。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐