【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 中 不能调用 构造函数 )
文章目录
- 一、匿名对象 生命周期
- 1、匿名对象 生命周期 说明
- 2、代码示例 - 匿名对象 生命周期
- 二、构造函数 中调用 构造函数
- 1、构造函数 中 不能调用 构造函数
- 2、代码示例 - 构造函数中调用构造函数
构造函数初始化列表 总结 :
- 初始化列表 可以 为 类的 成员变量 提供初始值 ;
- 初始化列表 可以 调用 类的 成员变量 类型的 构造函数 进行成员变量初始化操作 ;
- 初始化列表 可以 使用 构造函数 中传入的 参数 ;
- 类初始化时 , 根据定义顺序 , 先调用 成员变量的 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ;
- 实例对象 的 const 成员变量 必须只能在 初始化列表 中进行 初始化 , 所有的构造函数都要进行初始化操作 ;
- 构造函数 中 不能调用 构造函数 ;
一、匿名对象 生命周期
1、匿名对象 生命周期 说明
调用 类名(构造函数参数) 创建的是 匿名对象 ;
匿名对象 的 生命周期 仅限于 该 匿名对象 所在的 代码表达式 ,
一旦 该行代码执行完毕 , 匿名对象就会被销毁 ;
匿名对象 的 生命周期 仅限于 那一行代码 中 ;
匿名对象 生命周期 分以下几种情况 :
- 单独创建 匿名对象 , 不使用变量 接收该 匿名对象 , 匿名对象 的生命周期 仅限于 创建匿名对象 的那一行代码表达式 , 一旦该行代码执行完毕 , 匿名对象 就会被销毁 ;
- 如果 匿名对象 被用于 对象初始化 , 匿名对象 不会被销毁 , 而是被转为 普通对象 , 赋值给变量 ;
- 如果 匿名对象 被用于 为现存对象赋值 , 会将 匿名对象 的值赋值给 现有对象 , 赋值完毕后 , 匿名对象仍在本行代码执行结束后销毁 ;
2、代码示例 - 匿名对象 生命周期
下面的代码中 , 在 fun 函数中 , 调用 Student(18, 180) 代码 , 创建 Student 类型的匿名对象 , 匿名对象的生命周期 只存在于 这一行代码 , 该行代码执行完毕后 , 匿名对象 就会被 析构 ;
void fun()
{cout << "创建匿名对象之前" << endl;// 创建 Student 类型的匿名对象// 匿名对象的生命周期 只存在于 这一句话Student(18, 180);cout << "创建匿名对象之后" << endl;
}
代码示例 :
#include "iostream"
using namespace std;class Student
{
public:// 带参构造函数Student(int age, int height){m_age = age;m_height = height;cout << "执行 Student 的构造函数" << endl;}~Student(){cout << "执行 Student 的析构函数" << endl;}public:int m_age; // 年龄int m_height; // 身高
};void fun()
{cout << "创建匿名对象之前" << endl;// 创建 Student 类型的匿名对象// 匿名对象的生命周期 只存在于 这一句话Student(18, 180);cout << "创建匿名对象之后" << endl;
}int main()
{// 该函数中定义了一个匿名对象fun();// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}
执行结果 :
创建匿名对象之前
执行 Student 的构造函数
执行 Student 的析构函数
创建匿名对象之后
Press any key to continue . . .

二、构造函数 中调用 构造函数
1、构造函数 中 不能调用 构造函数
构造函数中 调用 构造函数 是危险行为 ;
构造函数 中调用 构造函数 , 并不会为本对象进行初始化操作 ;
构造函数 的调用方式 , 天然就会创建一个 匿名对象 ,
如果 没有变量 接收 这个 匿名对象 , 该匿名对象 在 本行表达式执行完毕后 , 就会被销毁 ;
2、代码示例 - 构造函数中调用构造函数
下面的代码中 ,
先定义 有参构造函数 ,
// 带参构造函数Student(int age, int height){m_age = age;m_height = height;cout << "执行 Student 的构造函数" << endl;}
然后 , 在无参的 构造函数中 , 调用 有参构造函数 ;
// 构造函数中 调用 构造函数 是危险行为Student(){// 构造函数中调用构造函数// 此时 创建 的是匿名对象// 如果 匿名对象 没有被接收 // 就会在 本代码 执行结束后 立刻销毁Student(18, 180);}
Student(18, 180) 调用方式 , 会创建一个 匿名对象 ;
如果 匿名对象 没有被接收 , 就会在 本代码 执行结束后 立刻销毁 ;
本实例对象 的成员变量实际上没有进行初始化 , 当前为随机值 ;
这也是 打印 对象成员变量 的值为随机值 的原因 ;
s.m_age = -858993460 , s.m_height = -858993460
代码示例 :
#include "iostream"
using namespace std;class Student
{
public:// 带参构造函数Student(int age, int height){m_age = age;m_height = height;cout << "执行 Student 的构造函数" << endl;}// 构造函数中 调用 构造函数 是危险行为Student(){// 构造函数中调用构造函数// 此时 创建 的是匿名对象// 如果 匿名对象 没有被接收 // 就会 本代码 执行结束后 立刻销毁Student(18, 180);}~Student(){cout << "执行 Student 的析构函数" << endl;}public:int m_age; // 年龄int m_height; // 身高
};void fun()
{// 创建 Student 类型的匿名对象// 匿名对象的生命周期 只存在于 这一句话Student(18, 180);
}int main()
{// 该函数中定义了一个匿名对象//fun();Student s;cout << "s.m_age = " << s.m_age << " , s.m_height = " << s.m_height << endl;// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}
执行结果 :
执行 Student 的构造函数
执行 Student 的析构函数
s.m_age = -858993460 , s.m_height = -858993460
Press any key to continue . . .

相关文章:
【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 中 不能调用 构造函数 )
文章目录 一、匿名对象 生命周期1、匿名对象 生命周期 说明2、代码示例 - 匿名对象 生命周期 二、构造函数 中调用 构造函数1、构造函数 中 不能调用 构造函数2、代码示例 - 构造函数中调用构造函数 构造函数初始化列表 总结 : 初始化列表 可以 为 类的 成员变量 提供初始值 ;…...
Knife4j系列--使用方法
原文网址:Knife4j系列--使用/教程/实例/配置_IT利刃出鞘的博客-CSDN博客...
pmp项目管理考试是什么?适合哪些人学?
PMP,简单点说,就是美国PMI为考察项目管理人士的专业能力而设立的考试。 该流程以知识和任务驱动型指南评估从业者的能力,同时确定项目经理能力行业标准,包括各项知识、任务和技能的特点、重要性与运用频率。(考纲原文…...
CSDN博客可以添加联系方式了
csdn博客一直不允许留一些联系方式,结果是官方有联系方式路径 在首页,往下拉,左侧就有 点击这个即可添加好友了~ 美滋滋,一起交流, 学习技术 ~...
小程序隐私弹窗的实现
小程序的开发者对于微信官方来说是有爱有恨,三天二头整事是鹅厂的一贯风格。 隐私弹窗的几个要点 回归正题,小程序隐私弹窗的几个要点: 1、何时弹出用户隐私协议的弹窗? 2、是每次进小程序都弹出来吗? 这两个想明…...
【JavaEE】多线程案例-单例模式
文章目录 1. 前言2. 什么是单例模式3. 如何实现单例模式3.1 饿汉模式3.2 懒汉模式4. 解决单例模式中遇到的线程安全问题4.1 加锁4.2 加上一个判断解决频繁加锁问题4.2 解决因指令重排序造成的线程不安全问题 1. 前言 单例模式是我们面试中最常考到的设计模式。什么是设计模式呢…...
社区分享|MeterSphere变身“啄木鸟”,助力云帐房落地接口自动化测试
云帐房网络科技有限公司(以下简称为“云帐房”)成立于2015年3月,以“成为最值得信赖的税务智能公司”为愿景,运用人工智能、大数据等互联网技术,结合深厚的财税行业服务经验,为代账公司和中大型企业提供智能…...
fpga内嵌逻辑分析仪使用方法
文章目录 前言一、方法1 — 使用 IP 核创建 ILA 调试环境1、创建 ILA ip 核2、进行例化3、生成比特流文件4、下载程序5、进行在线调试 二、方法2 — 使用 Debug 标记创建 ILA1、Debug 标记相关信号2、综合操作3、设置 Set Up Debug4、生成比特文件5、下载程序6、进行在线调试 前…...
第14章 结构和其他数据形式
本章介绍以下内容: 关键字:struct、union、typedef 运算符:.、-> 什么是C结构,如何创建结构模板和结构变量 如何访问结构的成员,如何编写处理结构的函数 联合和指向函数的指针 设计程序时,最重要的步骤之…...
vue 把echarts封装成一个方法 并且从后端读取数据 +转换数据格式 =动态echarts 联动echarts表
1.把echarts 在 methods 封装成一个方法mounted 在中调用 折线图 和柱状图 mounted调用下边两个方法 mounted(){//最早获取DOM元素的生命周期函数 挂载完毕console.log(mounted-id , document.getElementById(charts))this.line()this.pie()},methods里边的方法 line() {// …...
Python基础08 面向对象的基本概念
Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。 面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的。…...
APP自动化之Poco框架
今天给大家介绍一款自动化测试框架Poco,其脚本写法非常简洁、高效,其元素定位器效率更快,其本质基于python的第三方库,调试起来也会非常方便,能够很好的提升自动化测试效率,节省时间。 (一)背景…...
c++拷贝构造【显式调用】和运算符=重载构造【隐式调用】解析
深拷贝 vs. 浅拷贝 深拷贝:开辟新内存,独立对象,堆区浅拷贝:共享内存,引用对象,栈区 深拷贝:深拷贝是一种拷贝方式,它会在堆区重新分配内存并复制对象的内容。 这意味着原对象和新…...
无涯教程-JavaScript - LCM函数
描述 LCM函数返回整数的最小公倍数。最小公倍数是最小的正整数,它是所有整数参数number1,number2等的倍数。使用LCM添加具有不同分母的分数。 语法 LCM (number1, [number2] ...)争论 Argument描述Required/OptionalNumber1, number2... 您想要最小公倍数的1到255个值。 如…...
Java多线程篇(3)——线程池
文章目录 线程池ThreadPoolExecutor源码分析1、如何提交任务2、如何执行任务3、如何停止过期的非核心线程4、如何使用拒绝策略 ScheduledThreadPoolExecutor源码分析 线程池 快速过一遍基础知识 7大参数 corePoolSize : 核心线程数 maximumPoolSize: 最…...
那些年我们遇到过的关于excel的操作
本文为直接从百度上搜索的关于excel的函数使用,方便以后用,希望会持续补充 excel中筛选出两列重复的数据【场景:A、B两列数据个数不同且无序,想找出A列中的数据在B列中不存在的,通过比较后单元格为空的代表该行不存在的…...
Angular变更检测机制
前段时间遇到这样一个 bug,通过一个 click 事件跳转到一个新页面,新页面迟迟不加载; 经过多次测试发现,将鼠标移入某个 tab ,页面就加载出来了。 举个例子,页面内容无法加载,但是将鼠标移入下图…...
Redis之String类型
文章目录 Redis之String类型1. 赋值/获取值2. 同时设置/获取多个键值3. 数值增减4. 获取字符串长度5. 向尾部追加值6. 分布式锁7.应用场景 Redis之String类型 Redis命令不区分大小写 1. 赋值/获取值 赋值:set key value 取值:get key (当键不存在时候&…...
使用redis中的zset实现滑动窗口限流
使用redis和zset实现滑动窗口限流 文章目录 使用redis和zset实现滑动窗口限流Zset**初始化一个ZSet**:其中包含所有用户的ID和时间戳。**添加元素到ZSet**:当用户发起请求时,将当前时间戳和用户ID作为元素添加到ZSet中。**删除过期的元素**&a…...
Linux下C语言使用 netlink sockets与内核模块通信
netlink简介 Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。在Linux标准内核中,系统默认集成了很多netlink实例,比如日志上报、路由系统等,netlink消息是双向的&a…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
基于小程序老人监护管理系统源码数据库文档
摘 要 近年来,随着我国人口老龄化问题日益严重,独居和居住养老机构的的老年人数量越来越多。而随着老年人数量的逐步增长,随之而来的是日益突出的老年人问题,尤其是老年人的健康问题,尤其是老年人产生健康问题后&…...
【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
如何结合 Conda 任意创建和配置不同 Python 版本的双轨隔离的Poetry 虚拟环境? 在 Python 开发中,为不同项目配置独立且适配的虚拟环境至关重要。结合 Conda 和 Poetry 工具,能高效创建不同 Python 版本的 Poetry 虚拟环境,接下来…...
