У меня есть что-то вроде этого:
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" являются копиями, поскольку я не возвращаю Bars с тем же адресом памяти. Если я явно определяю переменные как ссылки на Bar (Bar &), то все работает так, как я ожидал.
Я должен упомянуть, что я компилирую vs2012. Что здесь происходит?
Спасибо.