C++ 从函数转移返回的唯一\u ptr的所有权 A类{}; 无效使用(常量A&){} 独一无二的我的乐趣(){ 返回make_unique(); } int main(){ const A&rA=*my_fun();//错误:对象将被销毁 使用(rA); const auto rA1=my_fun();//复制唯一的副本。转移所有权 使用(*rA1); const auto&rA2=我的乐趣(); 使用(*rA2); 返回0; }

C++ 从函数转移返回的唯一\u ptr的所有权 A类{}; 无效使用(常量A&){} 独一无二的我的乐趣(){ 返回make_unique(); } int main(){ const A&rA=*my_fun();//错误:对象将被销毁 使用(rA); const auto rA1=my_fun();//复制唯一的副本。转移所有权 使用(*rA1); const auto&rA2=我的乐趣(); 使用(*rA2); 返回0; },c++,unique-ptr,C++,Unique Ptr,rA不工作,因为返回的指针将被破坏rA1工作正常,因为所有权的转移保留了对象。我的问题是关于rA2的。它是返回的unique\u ptr的别名,对吗?为什么对象没有被销毁,比如在rA的情况下?可能重复的对象的可能重复 class A{}; void use(const A&){} unique_ptr<A> my_fun(){ return make_unique<A>(); } int main(){ const A& rA = *

rA
不工作,因为返回的指针将被破坏
rA1
工作正常,因为所有权的转移保留了对象。我的问题是关于rA2的。它是返回的
unique\u ptr
的别名,对吗?为什么对象没有被销毁,比如在
rA
的情况下?

可能重复的对象的可能重复
class A{};

void use(const A&){}

unique_ptr<A> my_fun(){
    return make_unique<A>();
}

int main(){
    const A& rA = *my_fun();    //Error: object will be destructed
    use(rA);

    const auto rA1 = my_fun();    //make a copy of the unique_ptr. transfer the ownership
    use(*rA1);

    const auto& rA2 = my_fun();    
    use(*rA2);

    return 0;
}