在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
昨天在看前些天写的代码,发现一个错误。
#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();
但是在
sharedInstance()
于是
singleton* p=singleton::sharedInstance();
singleton* p=new singleton(); //构造函数是私有的,这里只是这样理解
-------------------------------------------------------------------------------------------------------------- 这里只是讨论为什么程序没有出错。。。 对于编译器的各种警告,如果可以的话把警告设置成错误吧。。。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论