C++ 移动语义

标签 c++

我有这个例子:

Widget* makeWidget(int a, int b) {
if (a > b) {
    return new Widget(a);   
}
else {
    return new  Widget(b);  
 }
}

这不是和移动返回值一样吗,因为你只是传递引用而不是拷贝?为什么要结束 Moving Constructor/Assignemnt?

问候

最佳答案

取决于你将它与什么进行比较。如果您已将返回类型替换为 unique_ptr<Widget> ,您将使用移动构造函数来实现清晰的所有权语义。

与普通 Widget 相比返回,如果您这样做,您也将实现不可为空性。

在您的情况下,没有执行任何移动,但您也没有任何好处。您返回一些可以为 null 的东西,没有所有权规范。如果没有移动构造函数,您可以这样做,或者被迫复制以维护适当的语义和保证。移动构造函数让您既能吃蛋糕又能吃。

关于C++ 移动语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44454537/

相关文章:

c++ - 如何在成员初始值设定项列表之外初始化类成员

c++ - 与 Sunstudio 的静态链接

c++ - Ubuntu 10.04 中的 Boost.Python 教程

c++ - 在 C++ 中有什么技巧可以处理非常非常大的输入吗?

c++ - 构建 INSTALL 时 vtk msvc14 安装失败

c++ - valgrind:内存泄漏(不匹配的 free()/delete/delete[] )

C++ 如何判断一个值是否赋给了一个变量?

python - 有人可以解释 pybind11 安装吗?

c++ - decltype 作为类成员函数中的返回类型

c# - 为什么异步回调套接字方法通常是静态的?