C++ 需要返回值的函数却没有返回值的情况 单例模式
昨天在看前些天写的代码,发现一个错误。
#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(); //构造函数是私有的,这里只是这样理解
--------------------------------------------------------------------------------------------------------------
这里只是讨论为什么程序没有出错。。。
对于编译器的各种警告,如果可以的话把警告设置成错误吧。。。
posted on 2013-12-12 17:37 love so much 阅读(858) 评论(0) 收藏 举报

浙公网安备 33010602011771号