下面的代码会抛出一个警告:
警告 C4239:使用了非标准扩展:“参数”:从“std::unique_ptr<_Ty>”到“std::unique_ptr<_Ty> &”的转换
std::unique_ptr<T> foo() { return std::unique_ptr<T>( new T ); }
std::unique_ptr<T> myVar;
myVar.swap(foo());
我想知道处理这种情况的正确方法是什么。
最佳答案
std::unique_ptr
的 swap
成员函数采用非常量左值引用,表达式 foo()
是一个右值,如下所示foo
是一个返回对象(而不是引用)的函数。您不能将右值绑定(bind)到非常量左值引用。
请注意,您可以反过来进行交换:
foo().swap(myVar);
更简单的做法是直接初始化:
std::unique_ptr<T> myVar(foo());
关于c++ - 为什么我不能将 unique_ptr 与函数返回的 unique_ptr 交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12117630/