昨天在看前些天写的代码,发现一个错误。

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

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

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

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

转载于:https://www.cnblogs.com/riasky/p/3471677.html

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

  1. Python 返回值为函数时的布尔值

    最近使用匿名函数时遇到一个问题 输出1-20 中非2的倍数 def is_odd(n):return lambda: n%2 == 1 L=list(filter(is_odd,range(1,21) ...

  2. php 返回数组元素函数_php array_values 返回数组的所有值详解及实例

    php array_values php array_values 函数用于返回数组中所有的值,注意该函数将为新数组建立数组索引,原来的文字索引将不存在.本文章向大家讲解array_values函数的 ...

  3. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例

    python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...

  4. php函数设置默认值,php函数如何设置默认值作为对象?

    一个函数(实际上是另一个类的构造函数)需要一个类temp的对象作为参数.所以我定义接口项目,并将itemp $obj作为函数参数.这很好,我必须将类temp对象传递给我的函数.但是现在我想设置这个it ...

  5. java 函数给默认值_函数参数的默认值

    在C中,关于它们在参数列表中的位置对默认参数施加的要求如下: 必须指定给定参数的默认参数不超过一次 . 多次指定它(即使具有相同的默认值)是非法的 . 具有默认参数的参数必须在参数列表的末尾形成一个连 ...

  6. c语言 为参数设置默认值,js函数参数设置默认值

    前端学HTTP之网关.隧道和中继 前面的话 Web是一种强大的内容发布工具.人们已经从只在网上发送静态的在线文档,发展到共享更复杂的资源,比如数据库内容或动态生成的HTML页面.Web浏览器为用户提供 ...

  7. c语言主函数如何获得子函数的值,子函数中的数组值怎么带回主函数中?

    int fid(int c[10][7]) { int i,j; for(i=1;i<=10;i++) { for(j=3;j<=7;j++) c[i][j]=c[i][j]+c[i][j ...

  8. android 调用js怎么获取返回值_js 函数

    函数是一个特殊的对象 具名函数 function 函数名(形式参数1,形式参数2){ 语句 return 返回值 } 匿名函数 上门的具名函数,去掉函数名就是匿名函数 let a =function( ...

  9. python中return返回值为函数名_Python函数返回值

    Python函数返回值教程 同时,Python 函数的返回值不需要在函数的签名上体现,只需要在函数体里面直接使用 return 语句返回即可. Python函数不返回值详解 语法 def func_n ...

  10. python函数参数定义顺序_Python函数定义-位置参数-返回值

    原标题:Python函数定义-位置参数-返回值 1 函数介绍 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多 ...

最新文章

  1. java项目_JNPF快速开发平台-简单快速高效开发java项目
  2. 将syslog ng日志写入MySQL(远程)数据库
  3. 【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★
  4. 成功的自动化测试实施的5大支柱(译)
  5. 运维小菜鸟随笔Linux入门级操作命令(更新中。。。)
  6. linux 格式化 目录,Linux 磁盘分区、格式化、目录挂载
  7. LeetCode 406 根据身高重建队列
  8. 我当圣诞老人跳舞啦!
  9. python调用sqlplus执行_python可以调用sqlplus吗?
  10. kubernetes英语怎么读_英语音标怎么读?如何从零基础英语音标入门英语口语学习...
  11. 【白皮书分享】人工智能“新基建”发展白皮书.pdf(附下载链接)
  12. linux初识到入门_系统
  13. 大数据该如何运行与分析
  14. Windows10 中在指定目录下启动Powershell
  15. 联想T110 8G优盘 安国AU6983主控量产成功
  16. 网络攻防技术——缓冲区溢出攻击实验
  17. 如何在开源世界打造自己的明星 Project?
  18. 血管有多好,你就能活多久!这几种伤血管行为,你还在做吗?
  19. C语言做的猜数字小游戏
  20. 微信小程序开发之——婚礼邀请函-邀请函页面(4.3)

热门文章

  1. 常用网络协议的端口号
  2. 新华三模拟器Telnet/远程登录
  3. C++智能指针的实现与使用(详解)
  4. 游戏开发之C++IO流(C++基础)
  5. 华为IS-IS基础配置
  6. 计算机网络学习方法和书籍推荐
  7. MySQL使用小技巧(一)——MySQL删除
  8. CentOS7安装配置启动MySQL(附解决password does not satisfy)
  9. 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!
  10. JavaScript中JSON的处理心得