1. ホーム
  2. c++

[解決済み】コンストラクタの初期化リストの評価順序について

2022-03-31 02:39:42

質問

いくつかの引数を取るコンストラクタがあります。 リストされた順序で構築されるものと思っていましたが、あるケースでは逆に構築され、アボートされたようです。引数を逆にすると、プログラムがアボートしなくなりました。 これは私が使っている構文の一例です。 この場合、a_はb_の前に初期化される必要があります。 構築の順序を保証できますか?

class A
{
  public:
    A(OtherClass o, string x, int y) :
      a_(o), b_(a_, x, y) { }

    OtherClass a_;
    AnotherClass b_;
};

解決方法は?

クラス内のメンバ変数の宣言順序に依存します。つまり a_ が最初になり、次に b_ は、この例では2番目になります。