c++ - 为什么我不能将 unique_ptr 与函数返回的 unique_ptr 交换?

标签 c++ visual-studio-2012 unique-ptr

下面的代码会抛出一个警告:

警告 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_ptrswap 成员函数采用非常量左值引用,表达式 foo() 是一个右值,如下所示foo 是一个返回对象(而不是引用)的函数。您不能将右值绑定(bind)到非常量左值引用。

请注意,您可以反过来进行交换:

foo().swap(myVar);

更简单的做法是直接初始化:

std::unique_ptr<T> myVar(foo());

关于c++ - 为什么我不能将 unique_ptr 与函数返回的 unique_ptr 交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12117630/

相关文章:

c++ - 作业 : Counting number of times an item occurs in a linked list

C++中断线程等待用户输入

C++ 将数据插入链表时发生内存泄漏

c++ - 将 std::unique_ptr 与分配器一起使用

c++ - 来自不同类的内联类函数,都内联?

c++ - 防止进入特定功能的 VS2012 NativeDE\StepOver 注册表项是否更改了格式?

c# - 如何在 Visual Studio 中测试函数速度

c# - 如何检查是否选中了 dataGridView 复选框?

c++ - 使用 unique_ptr<T> 和前向声明会导致 C2027 和 C2338

c++ - 多重继承和unique_ptr销毁