【发布时间】:2013-01-25 16:38:39
【问题描述】:
我有这样的事情:
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.
}
似乎“自动”变量是副本,因为我没有使用相同的内存地址返回 Bars。 如果我将变量明确定义为 Bar 引用 (Bar&),那么一切都会按我的预期工作。
我应该提到我在 vs2012 中编译。这是怎么回事?
谢谢。
【问题讨论】:
-
这也让我很困惑,所以一些不错的人解决了我的问题 :) :stackoverflow.com/questions/12052474/…