三つのことに注意してください。
1.手動で初期化する内蔵の非メンバーオブジェクト
オブジェクトを扱うためにメンバーのリストのすべてのメンバーを初期化する2.
3.その設計に注意を払うへの質問「初期化シーケンスではありませんがありません」。
ここでは、第三のケースに焦点を当てます:
以下TFSは、外部ファイルb.cppで使用されますが、b.cppのTFSで使用される文言は、これが問題の原因となります、初期化されていることを保証することはできません。
1つの // AH 2 クラスファイルシステム 3。 { 4 公共: 5 int型 numDisk()のconst ; 6 }; 7 。8 のexternファイルシステムFS; // のみ宣言 9 10 // a.cpp 。11ファイルシステムFS; // これが定義されている 12である 13のIS 14 /// B.cpp 15 クラスディレクトリ 16 { 17。 公共: 18である ディレクトリ(文字列 のparams) 。19 { 20は 、INT(=ディスクのfs.numDisks); // コンパイル時にためa.cppのb.cpp及びシーケンスを保証するものではない、まだそれを用いたTFS、そこに初期化されないことが 21 } 22 } ;
TFSはでコールするとき、我々はfsが初期化されなければならない戻りオブジェクトへの参照は、そのようなb.cppを確保できるという関数を宣言します。しかし、著者はそれの静的変数の使用を参照してくださいなぜここで私は、質問がありますか?できませんローカル変数です?または参照を使用していませんか?
1つの // AH 2 クラスファイルシステム // ライブラリクラスで定義された 。3 { 4 公共: 5 int型 numDisks()のconst ; 6 }; 7 。8 // a.cpp 。9ファイルシステム・TFS()// ライトショーのTFS()グローバル関数ではなく、メンバ関数である。 10 { 11 静的、ファイルシステムFS // C ++は、ローカル静的関数が初期化される「第1のオブジェクトタイプの定義を満たし、」「関数が呼び出された」中されるオブジェクトことを確実にする場合。 12は 戻り、FS 13である } 14の 15 // B.cpp 16 クラスディレクトリ 17 { 18 公共: 19 ディレクトリ(文字列 のparams ) 20 { 21 int型の ディスク= TFS()numDisks();。 22 } 23 }。