C++ 需要返回值的函数却没有返回值的情况 单例模式
2013-12-12 11:46
288 查看
昨天在看前些天写的代码,发现一个错误。
问题在:
程序运行没有问题,但是事实上
程序第一次运行的时候函数并没有返回值。
但是 p 却获取到了正确的值。。。。。。。
------------------------------------------------------------------------------------------------------------
亮瞎给我解释:
CPU中有个寄存器exa,就是用来存放函数返回值的。
在new 操作的时候返回了singleton实例的指针。保存到exa中。
但是在
函数中没有返回值,于是这个函数返回了exa中存储的值。。。
于是
就变成了
--------------------------------------------------------------------------------------------------------------
这里只是讨论为什么程序没有出错。。。
对于编译器的各种警告,如果可以的话把警告设置成错误吧。。。
#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(); //构造函数是私有的,这里只是这样理解
--------------------------------------------------------------------------------------------------------------
这里只是讨论为什么程序没有出错。。。
对于编译器的各种警告,如果可以的话把警告设置成错误吧。。。
相关文章推荐
- C++ 需要返回值的函数却没有返回值的情况 单例模式
- C++调用成员函数需要this指针的情况
- C++对于运算符*或者+等的重载,函数返回对象需要加const吗?
- C++函数返回引用的情况说明
- 全国计算机等级二级C++第四章习题编程题6 :编写一个函数 char *strfind(char *s, char *t),用于查找字符串t在字符串s中最右边出现的位置,如果没有找到则返回NULL.
- c++函数在传入对象参数和返回对象时候的内存调用情况
- 创建存储过程,以部门编号为参数返回该部门的人数及平均工资(返回一个值可以通过函数来实现,但如果要返回多个值,需要使用out或in out模式参数实现)
- linux c++ 函数需要返回值,但是没返回的问题
- c/c++: c++函数返回类型什么情况带const
- C++函数返回值的特殊情况(返回引用、非引用、引用左值)
- CI框架,select 查询sql,没有结果是返回false还是空数组? 什么情况下返回false?
- 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?
- 内存共享函数OpenFileMapping,在release模式下返回NULL
- 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集
- lua入门之二:c/c++ 调用lua及多个函数返回值的获取
- 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行
- primer c++ 读书笔记 —— 函数返回
- 带返回值的函数如果没有写全返回路径,这时的返回值系统由AX寄存器值确定
- 如何快速定位一个函数的返回点(c/c++ Only)
- c++ 函数返回引用