编写高质量代码——首选初始化列表实现类成员的初始化
来源:互联网 发布:港股交易软件 编辑:程序博客网 时间:2024/06/08 07:52
构造函数:对类成员变量完成初始化赋值操作。
类成员的初始化方式:1)在构造函数体中赋值完成(“=”本质是赋值操作)
2)用初始化类成员列表完成,是真正的初始化。
===============================================================
只能使用“初始化参数列表”的情况:
1)const 成员变量
2)如果类B中含有A类型的成员变量,而类A中又禁止了赋值操作(private...)
如下:
class A{
private :
A operator=(const A&);
};
class B{
public :
B(){};
~B(){};
private :
A m_A;
};
--------------------------------
采用构造函数内赋值的方式对成员变量m_A进行初始化:
B::B(){
m_A = A();// A A::operator=(const A&)’是私有的
}
采用初始化列表参数方式解决:
B::B:m_A(A()){ }
即使没有禁用赋值操作,仍推荐使用初始化参数列表的方式。
===============================================================
构造函数体内赋值初始化方式存在两个问题:
1)比起初始化列表,效率偏低
如下:
class A{
};
class B{
public :
B(){};
~B(){};
private :
A m_A;
};
B::B(){
m_A = A();/* 在该过程中,会产生临时对象,临时对象的构造、析构会造成无谓的效率损耗,而初始化列表方式可以避免 */
}
2)留有安全隐患:C++会悄悄生成默认的赋值函数,对于千变万化的类而言,默认的赋值操作很可能存在问题。
===============================================================
对初始化列表的说明,即初始化的顺序。
==与构造函数中的赋值方式不同,初始化列表中成员变量出现的顺序并不是真正初始化的顺序,初始化的顺序取决于成员变量在类中的声明顺序。
Note:只有保证成员变量声明的顺序与初始化列表顺序一致才能真正保证其效率。
- 编写高质量代码——首选初始化列表实现类成员的初始化
- C++类成员初始化为什么要首选初始化列表
- 编写高质量代码,改善C++程序的150个建议:指针、初始化和运算符
- 编写高质量代码,改善C++程序的150个建议:指针、初始化和运算符
- C++ 类初始化列表的成员初始化顺序
- C++为什么用初始化列表初始化类的成员变量
- 初始化列表成员变量的初始化
- C++主题——成员初始化列表
- C++主题——成员初始化列表
- C++主题——成员初始化列表
- c++——成员初始化列表
- 成员初始化列表的句法
- C++初始化类成员列表
- C++类成员初始化列表
- 类成员的初始化--成员初始化列表(常量,引用,成员对象)
- 编写高质量OC代码52建议总结:16.提供“全能初始化方法”
- 类的第四个成员--初始化代码块
- 编写高质量代码——运算符重载,是成员函数还是友元函数
- python 数学函数
- 设计模式(20)-行为型模式-State模式
- 开启 J2EE(一)—‘全明星队伍’
- windows error "the application was unable to start correctly (0x000007b)"
- blog
- 编写高质量代码——首选初始化列表实现类成员的初始化
- 【文件管理】文件的读read()
- 有好的网站自荐或推荐给我哟,要求站长在线率高
- 我的第一篇编程日志——初始化问题
- 几个开源日志分析系统介绍
- Caching Bitmaps缓存bitmaps(Android官方文档翻译三)
- Python常用函数
- 关于登录功能的那些事
- java多线程同步工具之Exchanger