确定对象被使用前已经被初始化
Posted 朝_风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了确定对象被使用前已经被初始化相关的知识,希望对你有一定的参考价值。
在对象使用之前将它初始化,对于无任何成员的内置类型,你必须手工完成此事。
例如:
int x = 0;
const char *text = " ";
double d;
std::cin >> d; //以input stream 的方式完成初始化
内置类型以外的任何其他东西,初始化责任落在构造函数身上。确保每一个构造函数都将对象的每一个成员初始化。
![技术分享](/img/jia.gif)
1 1 class CTest {
2 2 public:
3 3 int a;
4 4 float b;
5 5
6 6 //构造函数初始化列表
7 7 CTest(): a(0),b(2.3) {
8 8 }
9 9
10 10 //构造函数内部赋值
11 11 CTest() {
12 12 a=0;
13 13 b=2.3;
14 14 }
15 15 };
初始化和赋值对内置类型的成员没有什么大的区别,像上面的任一个构造函数都可以。对非内置类型成员变量,为了避免两次构造,推荐使用类构造函数初始化列表。
C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。
为避免需要记住成员变量何时必须在成员初值列表中初始化,何时不需要,最简单的做法就是:总是使用成员初值列。这样做有时候绝对必要,且又往往比赋值更有效。
为免除“跨编译单元之初始化次序”问题,请以local static 对象替换non - local static 对象。( ?)
——整理自《Effective C++》
以上是关于确定对象被使用前已经被初始化的主要内容,如果未能解决你的问题,请参考以下文章