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(); //构造函数是私有的,这里只是这样理解
--------------------------------------------------------------------------------------------------------------
这里只是讨论为什么程序没有出错。。。
对于编译器的各种警告,如果可以的话把警告设置成错误吧。。。
转载于:https://www.cnblogs.com/riasky/p/3471677.html
C++ 需要返回值的函数却没有返回值的情况 单例模式相关推荐
- Python 返回值为函数时的布尔值
最近使用匿名函数时遇到一个问题 输出1-20 中非2的倍数 def is_odd(n):return lambda: n%2 == 1 L=list(filter(is_odd,range(1,21) ...
- php 返回数组元素函数_php array_values 返回数组的所有值详解及实例
php array_values php array_values 函数用于返回数组中所有的值,注意该函数将为新数组建立数组索引,原来的文字索引将不存在.本文章向大家讲解array_values函数的 ...
- python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例
python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...
- php函数设置默认值,php函数如何设置默认值作为对象?
一个函数(实际上是另一个类的构造函数)需要一个类temp的对象作为参数.所以我定义接口项目,并将itemp $obj作为函数参数.这很好,我必须将类temp对象传递给我的函数.但是现在我想设置这个it ...
- java 函数给默认值_函数参数的默认值
在C中,关于它们在参数列表中的位置对默认参数施加的要求如下: 必须指定给定参数的默认参数不超过一次 . 多次指定它(即使具有相同的默认值)是非法的 . 具有默认参数的参数必须在参数列表的末尾形成一个连 ...
- c语言 为参数设置默认值,js函数参数设置默认值
前端学HTTP之网关.隧道和中继 前面的话 Web是一种强大的内容发布工具.人们已经从只在网上发送静态的在线文档,发展到共享更复杂的资源,比如数据库内容或动态生成的HTML页面.Web浏览器为用户提供 ...
- 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 ...
- android 调用js怎么获取返回值_js 函数
函数是一个特殊的对象 具名函数 function 函数名(形式参数1,形式参数2){ 语句 return 返回值 } 匿名函数 上门的具名函数,去掉函数名就是匿名函数 let a =function( ...
- python中return返回值为函数名_Python函数返回值
Python函数返回值教程 同时,Python 函数的返回值不需要在函数的签名上体现,只需要在函数体里面直接使用 return 语句返回即可. Python函数不返回值详解 语法 def func_n ...
- python函数参数定义顺序_Python函数定义-位置参数-返回值
原标题:Python函数定义-位置参数-返回值 1 函数介绍 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多 ...
最新文章
- java项目_JNPF快速开发平台-简单快速高效开发java项目
- 将syslog ng日志写入MySQL(远程)数据库
- 【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★
- 成功的自动化测试实施的5大支柱(译)
- 运维小菜鸟随笔Linux入门级操作命令(更新中。。。)
- linux 格式化 目录,Linux 磁盘分区、格式化、目录挂载
- LeetCode 406 根据身高重建队列
- 我当圣诞老人跳舞啦!
- python调用sqlplus执行_python可以调用sqlplus吗?
- kubernetes英语怎么读_英语音标怎么读?如何从零基础英语音标入门英语口语学习...
- 【白皮书分享】人工智能“新基建”发展白皮书.pdf(附下载链接)
- linux初识到入门_系统
- 大数据该如何运行与分析
- Windows10 中在指定目录下启动Powershell
- 联想T110 8G优盘 安国AU6983主控量产成功
- 网络攻防技术——缓冲区溢出攻击实验
- 如何在开源世界打造自己的明星 Project?
- 血管有多好,你就能活多久!这几种伤血管行为,你还在做吗?
- C语言做的猜数字小游戏
- 微信小程序开发之——婚礼邀请函-邀请函页面(4.3)