
109
6.3 動的変数の使用を減らす
に作ることができる。これにより、各メンバにメモリを割り当てるコストが減らせる。
クラスインスタンスが、他のクラスのメンバで、取り囲むクラスを作るときにメンバを作るのに
必要な資源がなく、動的に作らねばならないことがある。これに対処するパターンは、問題のクラ
スを(それへのポインタではなく)含むクラスのメンバにして、作るときにも完全には初期化しな
いようにする。問題のクラスでは、資源ができたらメンバ関数を作って完全に初期化する。それか
ら、動的インスタンスが
new
を使って初期化されるところで、初期化メンバ関数への呼び出しを挿
入しておく。このよく使われるパターンは、
2
段階初期化(
two-part/tow-phase initialization
)と
呼ばれる。
2
段階初期化には余分なコストがかからない。メンバはいずれにせよ作られるまでは使えない。
メンバインスタンスが完全に初期化されているかどうかチェックするコストは、それへのポインタ
が
nullptr
かどうかチェックするのと同じだ。この方式の利点は、初期化メンバ関数が、エラー
コードその他の情報を返せるのに、コンストラクタではそれができないことだ。
2
段階初期化は、ファイルを読み込んだり、インターネットの
Web
ページを要求するなどの失
敗するかもしれないような時間のかかる初期化において、クラスが何かをしなければならないとき
に大いに役立つ。別々の初期化関数を提供することで、この種の初期化を他のプログラムの作業と
並行に行い( ...