1

次のサンプルコードを書きました。

#include <iostream>

class B
{
  int Value;

  public:
  B(int V) : Value(V) {}

  int GetValue(void) const { return Value;}
};

class A
{
  const B& b;

  public:
  A(const B &ObjectB) : b(ObjectB) {}

  int GetValue(void) { return b.GetValue();}

};


B b(5);

A a1(B(5));

A a2(b);

A a3(B(3));


int main(void)
{
  std::cout << a1.GetValue() << std::endl;
  std::cout << a2.GetValue() << std::endl;
  std::cout << a3.GetValue() << std::endl;

  return 0;
}

mingw-g++ でコンパイルし、Windows 7 で実行すると、

6829289
5
1875385008

したがって、出力から得られるのは、2 つの匿名オブジェクトがグローバル コンテキストで宣言されていても、初期化が完了すると破棄されるということです。

この私の質問から: クラスに格納されている const 参照が常に有効なオブジェクトを参照することを確認する方法はありますか?

4

2 に答える 2

1

いいえ、ありません。参照は内部のポインターであり、通常は参照するオブジェクトの有効期間を制御しないことに注意してください (例外についてはこちらを参照してください。ただし、この場合は適用されません)。これが必要なコードの一部である場合は、B オブジェクトを使用することをお勧めします。

また、C++11 の a などのオブジェクトを利用することもできますshared_ptr。これは、関数内とオブジェクト内の両方のポインターが破棄された場合にのみオブジェクトを削除します。

于 2014-05-13T01:05:36.843 に答える