个人学习记录-Cpp基础-成员初始化列表
参考链接:
https://blog.csdn.net/XIONGXING_xx/article/details/115553291
https://blog.csdn.net/W_Y2010/article/details/120242653
https://blog.csdn.net/baidu_41388533/article/details/109489401
C++编译过程中类的构造过程:
1.对象将在参数列表,就是括号内的代码执行前,给成员变量分配内存;
2.程序流程进入括号内,使用常规的赋值方式将值存储到内存中;
3.进入构造体函数中进行赋值和计算;
这个过程就会引发一些问题:
1)成员变量是一个const对象,那么在分配内存后就不能进行赋值;
2)成员变量是一个引用过对象,构造后也不能被赋值,因此必须在创建时就进行初始化;
3)成员变量是一个类,这个类没有无参构造函数,在初始化时,没有办法进行构造;
4)子类在初始化父类的私有成员时;
实际就是部分成员在初始化和复制操作分开后,会出现问题;
c++提供了一个针对此类问题的解决方法,成员初始化列表。
成员初始化列表:
对于构造函数而言,C++提供了两种变量初始化的方式,在构造器的函数内,在初始化列表中;
class Test
{
private:
string m_str;
const int m_age;
public:
Test(const string &s, int i):m_str(s),m_age(i);
注意事项:
1.编译器会根据类声明的参数顺序去进行执行,和初始化列表里的顺序无关;
2.初始化列表里的代码执行,是在构造函数体之前进行执行的;
高效性:
直接在构造函数内进行初始化时,会把参数进行拷贝构造,生成临时对象,把临时对象赋值给成员变量,再析构它;
而使用成员初始化列表则直接进行成员变量的构造,少了临时对象生成的步骤;
最新文章
- jquery点击元素之外触发事件
- memory_limit session.cache_expire ecshop初始化注释说明
- 设置TextView控件的背景透明度和字体透明度
- Lamp下安装memcached
- TFS 服务器更换后工作区无法绑定
- C++ Built-In Array 的语义
- Java学习之内部类
- gcc 简单编译流程
- IPSec协议
- 痞子衡嵌入式:语音处理工具Jays-PySPEECH诞生记 - 索引
- Python-字典与json的转换
- 使用Java面向对象单词必备
- Java HashMap工作原理及实现[转]
- mysql数据库基于linux的安装步骤及数据库操作
- 15.1-uC/OS-III资源管理(锁调度器)
- weex 开发踩坑日记--环境配置、安卓运行、adb、开发
- conda虚拟环境
- mybatis通用mapper源码解析(一)
- 时间标准基础知识UTC和ISO8601
- Eric6启动时“无法定位序数4540于动态链接库LIBEAY32.dll”的错误