2

当存在移动构造函数时,c++11中的按值返回是否需要复制ctor?GCC 4.7.1 抱怨 copy-ctor 被隐式​​删除,因为我只有一个移动构造函数,但我认为在这种情况下它应该使用移动构造函数。

VeryLargeObject foo(...)
    {
    VeryLargeObject ret;
    //Built object
    return ret; //<Error: VeryLargeObject has deleted copy-constructor
    }

在我真正需要之前,我不想添加复制构造函数。

编辑:

抱歉,我发现我忘记了移动构造函数......我只有移动分配:-(

4

1 回答 1

3

不,在这种情况下你应该只需要一个移动构造函数。您的代码有错误(可能移动构造函数被抑制,或者您实际上没有添加它)或者它是 GCC 错误。根据您的帖子编辑,看起来可能是前者。

如果您尝试返回除局部变量之外的 L 值,则需要复制构造函数。在这种情况下,您可以使用将 L 值转换为 R 值move()以使其工作(当然,意识到您可能会更改 L 值的状态)。

于 2013-07-26T21:25:08.607 回答