一、盡量使用成員初始化的方式初始化成員;
c++規定成員初始化發生早於建構函式,建構函式最好使用成員初值列,而不要在建構函式中使用賦值操作。初值列中的成員變數的初始化順序是根據這些成員變數宣告的順序進行初始化的,所以為了保證一致性,成員初值列中的順序最好跟宣告順序一致。
二、為避免「跨編譯單元的初始化先後順序」問題,請以local static物件替換non-local-static物件。
在函式內部宣告的static物件叫做local static物件,反之,成為non-local-static物件。
每乙個生成obj的單元成為乙個編譯單元,而各個編譯單元之間初始化的先後順序是不能確定的,所以這樣就會出現以下一種問題,a編譯單元中申明了乙個non-local-static物件obj1,b編譯單元需要用到a中的obj1,但是不能保證a編譯單元一定比b單元先初始化,這樣b呼叫a的obj1時就會出現空指標的情況,對於這種問題的解決方案就是用函式來替換直接取a中的obj1(就是c++中的單例模式啦)
條款4 確定物件被使用前已被初始化
規則 內建型別,必須手工完成初始化。int x 0 const char p text a c style string 內建型別以外的其他東西,在建構函式內初始化 確保每乙個建構函式都將物件的每乙個成員初始化。但要分清賦值和初始化 下面的例子是賦值,不是初始化 class phonenumber ...
條款04 確定物件被使用前已被初始化
記住 永遠在使用物件前先將它初始化。1 不要混淆賦值assignment和初始化initialization。abentry abentry const std string name,const std string address,const std list phones 版本1 abentr...
條款4 確認物件在被使用前已被初始化
1。最佳的處理方式是 永遠在使用物件之前先將它初始化。對於無任何成員的內建型別,你必須手動完成此事。至於內建型別以外的任何其他東西,初始化的責任落在建構函式身上 確保每乙個建構函式都將物件的每乙個成員初始化。但是別混淆了賦值喝初始化。2.建構函式的乙個較佳寫法是,使用所謂的member initia...