1. 物件使用之前進行初始化
void Test00() { int x = 0; const char* text = "A C-style string"; double d; std::cin >> d; }
1. 使用初始化列表進行初始化
2. baseClass的初始化早於derivedClass
3. class的成員變數總是以宣告的順序進行初始化,而不是在成員初值列中的順序
class PhoneNumber {}; class ABEntry { public: ABEntry() : theName(), theAddress(), thePhones(), numTimesConsulted(0) {} ABEntry(const std::string& name, const std::string& address, const std::list<PhoneNumber>& phones) : theName(name), theAddress(address), thePhones(phones),numTimesConsulted(0) {} private: std::string theName; std::string theAddress; std::list<PhoneNumber> thePhones; int numTimesConsulted; };
1. 初始化次序的重要性,tfs在tempDir之前先被初始化,否則tempDir的建構函式會用到尚未初始化的tfs
2. 定義並初始化一個local static物件,以免除"跨編譯單元之初始化次序"
class FileSystem { public: size_t numDisks() { return 1u; } }; FileSystem& tfs() { static FileSystem fs; return fs; } class Directory { public: Directory() { std::size_t disks = tfs().numDisks(); } }; Directory& tempDir() { static Directory td; return td; }