我有这个例子:
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/