从函数返回的unique_ptr的范围是什么?

| 这样可以正常工作吗? (请参见示例)
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?
}
    
已邀请:
从函数返回的ѭ1does没有作用域,因为作用域仅适用于名称。 在您的示例中,临时ѭ1的生存期以分号结束。 (因此,是的,它将正常工作。)通常,当词法包含其值创建了该临时对象的右值的完整表达式完全被评估时,临时对象将被销毁。     
评估“完整表达式”后,临时值将被破坏,该表达式(大约)是最大的封闭表达式-在这种情况下为整个语句。因此很安全; doSomething返回后,unique_ptr被销毁。     
应该没事的考虑
int Func()
{
  int ret = 5;

  return ret;
}

void doSomething(int a) { ... }


doSomething(Func());
即使您将ret返回堆栈,也可以,因为它在调用范围之内。     

要回复问题请先登录注册