いくつかのパラメーターを受け取るコンストラクターが必要であり、これらのパラメーターを使用して、そのメンバー変数の値を計算できるとします。ただし、メンバー変数の値はパラメーターからの単純な割り当てではありません。メンバー変数の値として使用する前に、他のオブジェクトを作成し、値を変換する必要があります。
これは、イニシャライザ リストに詰め込みすぎです。また、変数を作成して再利用できないため、非常に非効率的です。そのため、コードをコピーして (同じオブジェクトの複数のコピーを作成して)、すべてのコードを初期化子リストに収める必要があります。
もう 1 つのオプションは、イニシャライザ リストを使用せず、デフォルトのコンストラクタを呼び出させ、コンストラクタ内の値を適切な計算で上書きすることです。
クラスにデフォルトのコンストラクターがない場合はどうなるでしょうか。どうすればこれをきれいに行うことができますか?
/* a class without a default constructor */
class A {
public:
B x1
B x2
A(B x1_, B x2_) : x1{x1_}, x2{x2_} {};
};
/* a class that contains an A object and needs to initialize it based on some complex logic */
class C {
public:
A a;
C(D d) :
a{b1,b2} // ultimately I just want to initialize a with two B objects
// but unfortunatelly they require a lot of work to initialize
// including instantiating other objects and using tons of methods
{}
};