3

質問はそれをすべて本当に言います。

デフォルトのコンストラクターを実装する場合、代わりに const ポインター メンバーを使用する方がよいでしょうか?

4

2 に答える 2

5

メンバー初期化リストを使用する必要があります。

struct foo
{
  const int& ref;
  foo() : ref(some_value()) { }
}

some_value()あなたに一時的なものを与えないことを確認してください。コンストラクターが終了するまで、その寿命が延長されるだけです。

コンストラクターの ctor-initializer (12.6.2) の参照メンバーへの一時的なバインドは、コンストラクターが終了するまで持続します。

于 2013-02-26T16:38:29.183 に答える
3

それは、デフォルトのケースでメンバーに何を参照してもらいたいかによって異なります。考えられる解決策は、デフォルト オブジェクト (おそらく何らかのNull オブジェクト)を持つことです。

struct Foo
{
    Foo() : bar_(defaultBar) {}
    Foo(Bar &bar) : bar_(bar) {}

  private:
    Bar &bar_;
    static Bar defaultBar;
};

または、@sftrabbit が示すように、関数からオブジェクトへの参照を取得できます。

于 2013-02-26T16:42:18.760 に答える