Effective C++ 条款四 确定对象被使用前已被初始化
1、对于某些array不保证其内容被初始化,而vector(来自STL)却有此保证。
2、永远在使用对象前初始化。对于无任何成员的内置类型,必须手工完成。
int x = 0;
const int * p = &x;
3、不要混淆赋值与初始化的区别。一般初始化在定义的时候一起进行。而赋值是在定义之后的动作。
比如说在某一个类中的构造函数中,函数的行为都是赋值操作,而非初始化操作。
一般来说,对象的成员变量的初始化动作发生在进入构造函数本体之前。所以,我们一般写在构造函数初始化列表中进行初始 化。类似与const成员变量的初始化。
a(const string &name,string &addtress):thename(name),theaddress(addtress){} ,不要忘记大括号。
4、对于某些内置类型的成员变量,如果是const 与 reference修饰,必须要初始化。所以,我们应该在构造函数初始化列表中进行全部实例变量的初始化动作。
对于有多个构造函数的类,我们可以将一些赋值操作放在一个函数中进行,然后在所有构造函数中调用此函数。
对于成员初始化的次序,一般都是先基类,然后是以声明的次序初始化。
记住:
1、为内置类型对象进行手工初始化,因为C++并不保证初始化他们。
2、构造函数最好时候初始化列表,而不要在构造函数体内使用赋值操作,在初始化列表中初始化的成员变量,其排列次序应该和他们在类中声明的次序一致。
3、为避免“跨编译单元之初始化次序”问题,请以local static 对象替换non-local static 对象。
Effective C++ 条款四 确定对象被使用前已被初始化的更多相关文章
- Effective C++ -----条款04:确定对象被使用前已被初始化
为内置型对象进行手工初始化,因为C++不保证初始化它们. 构造函数最好使用成员初值列,而不要在构造函数本体内使用赋值操作.初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同. 为免 ...
- [effictive c++] 条款04 确定对象被使用前已被初始化
成员初始化 在c和c++ 中,使用为初始化的类型经常会引发不可预料的错误,从而使得我们要花费巨大的时间用于调试查找问题,所以确定对象被使用前已被初始化是个非常好的习惯. 永远在使用之前对对象进行初始化 ...
- EC读书笔记系列之2:条款4 确定对象被使用前已先被初始化
条款4:确定对象被使用前已先被初始化 记住: ★为内置对象进行手工初始化,因为C++不保证初始他们 ★构造函数最好使用初始化列表,而不要在构造函数本体内使用赋值操作.初始化列表列出的成员变量,其排列次 ...
- 条款4:确定对象被使用前已被初始化(Make sure that objects are initialized before they're used)
其实 无论学何种语言 ,还是觉得要养成先声明后使用,先初始化再使用. 1.永远在使用对象之前先将其初始化. 内置类型: 必须手工完成. 内置类型以外的:使用构造函数完成.确保每一个构造函数都将对象的一 ...
- NO.4: 确定对象被使用前已被初始化
1.为内置对象进行 "手工初始化",因为C++不保证初始化他们(内置类型在赋值与初始化销毁基本相同,最好还是进行初始化列表),在内置类型过多情况下,可选择private函数统一初始 ...
- [Effective C++ --009]确定对象被使用前已先被初始化
在确保对象在使用前已先被初始化这一条款的编码实践中,作者为我们总结了三条经验,它们分别是: ------------------------------------------------------ ...
- Effective C++ 之 Item 4:确定对象被使用前已先被初始化
Effective C++ Chapter 1. 让自己习惯C++ (Accustoming Yourself to C++) Item 4. 确定对象被使用前已先被初始化 (Make sure th ...
- Effective C++_笔记_条款04_确定对象被使用之前已先被初始化
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 读取未初始化的值会导致不确定的行为.在某些平台上,仅仅只是读取为 ...
- Effective C++(4) 确定对象被使用前已先被初始化
危害:读取未初始化的值会导致不明确甚至是半随机化的行为. 最佳处理办法:永远在使用对象之前先将它初始化:确保每一个构造函数都将对象的每一个成员初始化. 1 注意区分赋值和初始化: 从初始化的角度而言, ...
随机推荐
- LeetCode(2)Add Two Numbers
题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...
- Lex与Yacc学习(七)之环境配置另一种方式
必备工具 flex-2.5.4a-1.exe 和 bison-2.4.1-setup.exe 以及 cygwin2.738 的安装文件,下载地址 http://download.csdn.n ...
- PAT Basic 1037
1037 在霍格沃茨找零钱 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一 ...
- 7,数据类型转换,set 集合,和深浅copy
str转换成list 用split list转换成str 用join tuple转换成list tu1 = (1,2,3) li = list(tu1)(强转) tu2 = tuple(li)(强 ...
- Python 对Mysql的操作
Mysql链接不同的数据库 如果python的模板是按照mysql来写的,后面数据库更换为了Oracle,难道需要重现再来写,当然不是,python提供了API接口,只要编写是面对api,后面的链接会 ...
- Jmeter性能指标分析-下载了服务器监控插件的各个组件的功能介绍
1.jp@gc - Actiive Threads Over Time:不同时间的活动用户数量展示(图表) 当前的时间间隔是1毫秒,在setting中可以设置时间间隔以及其他的参数 2.jp@gc - ...
- SQL server 数据库备份至服务器本地磁盘和其他服务器磁盘
前言 因工作需要将数据库每日备份至服务器本地磁盘和其他服务器磁盘,对网上的例子进行改造,解决了SQL server数据库备份的问题. 一.将指定数据库备份到本地 将数据库affair_stydy全备份 ...
- UITableView点击切换状态分析
原理:多选+点击动画 初始化和点击都调用的方法 - (void)changeStateAnimated:(BOOL)animated { //不需要动画,初始化的时候 if (animated == ...
- kali 1.1.0 boot failed
从几个月前的14.10 daily 版本就有U盘刻录无法启动的现象,相关bug可参见: https://bugs.launchpad.net/ubunt ... reator/+bug ...
- 标准C程序设计七---21
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...