1. 程式人生 > >條款04 確定對象被使用前已先被初始化

條款04 確定對象被使用前已先被初始化

clas local 定義 被調用 private 對象 引用 動作 style

一、概述

手工初始化內置類型對象

構造函數的成員初始化列表

static對象的初始化:包括non-local static和local static

二、細節

1. 你的構造函數使用了成員初始值列表了咩

不使用初始值列表:

class A {
public:
	A(const string &s, int i)
	{
		//下面都是賦值,而非初始化 
		s = name;
		score = i;
	}
private:
	string name;
	int score;
};

使用初始值列表:

class A {
public:
	A(const string &s, int i) :name(s), score(i)	{}
private:
	string name;
	int score;
}; 

C++規定,對象的成員變量的初始化動作發生在進入構造函數體之前,即上面那個版本的各成員會先被默認初始化,然後才進入函數體執行賦值操作。

補充:如果成員變量是const或references,那它們一定要初始化,而不能賦值!

2. 不同文件裏的non-local static對象的初始化順序是未定義的

我們可以將每個non-local static對象用一個返回其引用的函數封裝起來,這樣它就像local static對象了,至少函數被調用時它會被初始化。

條款04 確定對象被使用前已先被初始化