首页 > 代码库 > (1)确定对象被使用前已经被初始化

(1)确定对象被使用前已经被初始化

在对象使用之前将它初始化,对于无任何成员的内置类型,你必须手工完成此事。

例如:

int x = 0;

const char *text = " ";

double d;

std::cin >> d;    //以input stream 的方式完成初始化

 

内置类型以外的任何其他东西,初始化责任落在构造函数身上。确保每一个构造函数都将对象的每一个成员初始化。

技术分享
 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 };
View Code

初始化和赋值对内置类型的成员没有什么大的区别,像上面的任一个构造函数都可以。对非内置类型成员变量,为了避免两次构造,推荐使用类构造函数初始化列表。

 

C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。

 

为避免需要记住成员变量何时必须在成员初值列表中初始化,何时不需要,最简单的做法就是:总是使用成员初值列。这样做有时候绝对必要,且又往往比赋值更有效。

 

为免除“跨编译单元之初始化次序”问题,请以local static 对象替换non - local static 对象。( ?)

 

——整理自《Effective C++》

(1)确定对象被使用前已经被初始化