C++ Initialization
C++ 對內建 type(如 int)要手動做 initial。
class member 的初始化
以 constructor 的 member initialization list 做 member 的初始化,會直接將參數丟給該 member 相對應的 constructor,可避免先 run member 的 default constructor 後才再做 assign,效率較好。
member 初始化順序:
- base class -> derived class
- 依宣告次序初始化(宣告次序與 member initialization list 的次序可能不同)
初始化 member 的原則:將所有 member 依照宣告順序列在 member initialization list 中。
non-local static object 的初始化
C++ 未定義在不同 translation unit((產生單一 object file 的 source code))中的 non-local static objects((不在 function 中的 static object,如 global object))的初始化相對次序。
這會造成一些問題,例如在 source code A 裡的 global object objA 的初始化會用到在 source code B 裡的 global object objB 時可能有問題,因為不知道 objA 是不是會比 objB 晚初始化。
解法:把 non-local static object 放到一 function 中,讓它不是 non-local,則可以知道初始化的順序。該 function return object 的 reference,要用這類 object 時就 call 相應 function。
Ref
- 《Effective C++》p.27~28, 31