1. ホーム
  2. c++

コンストラクタでconstフィールドを初期化する方法とは?

2023-08-31 22:57:10

質問

C++のクラスFooとクラスBarがあり、Fooポインタが渡されるコンストラクタで作成され、このポインタはBarインスタンスのライフサイクルで不変であることを意味すると仮定してください。これを行う正しい方法は何ですか?

実は、以下のようなコードで書けると思ったのですが、コンパイルできません。

class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* foo) {
        this->foo = foo;
    }
};

class Foo {
public:
  int a;
};

どんな提案でも歓迎します。

どのように解決するのですか?

イニシャライザー・リストの中で行う必要があります。

Bar(Foo* _foo) : foo(_foo) {
}

(混乱を避けるため、入力される変数の名前を変更したことに注意してください)