【发布时间】:2017-12-07 13:54:04
【问题描述】:
这段代码的行为是否明确?返回的引用是否总是正确的? Bar::method() 调用会一直顺利吗?
struct Bar
{
void method() {...};
};
struct Foo
{
static unique_ptr<Bar> bar_ptr;
static Bar& get_reference()
{
return *bar_ptr;
}
};
unique_ptr<Bar> Foo::bar_ptr = nullptr;
int main()
{
Foo::bar_ptr = make_unique<Bar>();
Foo::get_reference().method();
return 0;
}
【问题讨论】:
-
是的,为什么不呢?
Bar的构造实例将在main返回后销毁。 -
这取决于你所说的“总是”是什么意思。不,在您致电
make_unique之前以及在main()终止之后的某个时间,这将是不正确的。 -
那么在 Bar 的实例被销毁之前引用将是正确的,我说得对吗?