11

私はこのようなものを持っています:

class Bar;

class Foo()
{
 public:
   Foo() : bar(new Bar());
   Bar& GetBar() { return *bar.get(); }
 private:
   std::unique_ptr<Bar> bar;
};

void main()
{
   Foo foo;
   auto bar1 = foo.GetBar();
   auto bar2 = foo.GetBar(); //address of bar2 != address of bar1. why?

   Bar& bar3 = foo.GetBar();
   Bar& bar4 = foo.GetBar(); //address of bar3 == address of bar4.
}

同じメモリアドレスでバーを返さないため、「auto」変数はコピーされているようです。変数を Bar 参照 (Bar&) として明示的に定義すると、すべてが期待どおりに機能します。

私はvs2012でコンパイルしていることに言及する必要があります。何が起きてる?

ありがとう。

4

3 に答える 3

22
于 2013-01-25T17:01:57.253 に答える
13

autoテンプレート引数推定のように機能します。bar1bar2typeBarがあるので、それらは独立したコピーです。タイプがbar3あり、同じ への参照です。bar4Bar &*foo.bar

于 2013-01-25T16:49:36.533 に答える