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

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

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

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

  • 相关阅读:
    第十二周学习进度条
    寻找水王
    第十一周进度条
    第十周进度条
    构建之法阅读笔记(二)
    第九周学习进度
    团队名字
    站立会议09
    站立会议08
    站立会议07
  • 原文地址:https://www.cnblogs.com/riasky/p/3471677.html
Copyright © 2020-2023  润新知