私はコンストラクターが大まかにこれを行うクラスを持っています:
class B;
class C;
class D;
class A{
private:
B b;
C c;
public:
A(istream& input){
D d(input) // Build a D based on input
b = B(d); // Use that D to build b
c = C(d); // and c
}
}
デフォルトのコンストラクターがある限り、これは正常に機能するはずB
です。C
私の問題はそうでB
はないのでb
、初期化リストで初期化する必要があります。しかし、d
計算する前にb
ビルドする必要があるため、これは問題c
です。
1つの方法は次のとおりです。
A(istream& input):b(D(input)),c(D(input)){}
しかし、 a の構築にD
は (非常に) コストがかかります (*)
この問題を回避するクリーンな方法は何ですか?
(*) これに関する別の問題は、 ifb
とc
を同じインスタンスから構築する必要があることです ( ifD
のコンストラクターがランダム化されている場合など)。しかし、それは私の場合ではありません。