这会正常吗?(见例)
unique_ptr<A> source()
{
return unique_ptr<A>(new A);
}
void doSomething(A &a)
{
// ...
}
void test()
{
doSomething(*source().get()); // unsafe?
// When does the returned unique_ptr go out of scope?
}
Run Code Online (Sandbox Code Playgroud)
fre*_*low 19
一个unique_ptr从函数返回的没有范围,因为范围只适用于名字.
在您的示例中,临时的生命周期unique_ptr以分号结束.(所以是的,它可以正常工作.)通常,当词汇包含rvalue的完整表达式时,会销毁临时对象,该rvalue的评估创建了临时对象被完全评估.
临时值在评估“完整表达式”后被破坏,它(大致)是最大的封闭表达式 - 或者在这种情况下是整个语句。所以它是安全的;在 doSomething 返回后,unique_ptr 被销毁。