AFAIK,在以下代码中,引用def foo(bar):
def test(some_string):
print(some_string)
return 'Decorator test: '+bar(some_string)
return test
的生命周期延长到范围结束(函数ro1
):
g()
返回此引用怎么样?对象是否仍然存在于class Some {
// Implementation here
};
Some f() {
return Some(/* constructor parameters here*/);
}
void g() {
Some&& ro1 = f();
// ro1 lives till the end of this function
}
中,还是会在g1()
退出时被破坏?
h()
答案 0 :(得分:5)
返回此引用怎么样?对象是否仍然存在于
中g1()
没有。终身扩展只发生一次。从f()
返回的临时值绑定到引用ro1
,其生命周期在该引用的生命周期内延长。 ro1
的生命周期在h()
结尾处结束,因此在ro2
中使用g1()
是一个悬空参考。
为了实现这一点,您需要处理值:
Some h() {
Some ro1 = f();
// Code skipped here
return ro1;
}
请注意,RVO仍适用于此处。