【发布时间】:2016-10-14 07:48:59
【问题描述】:
在下面的代码中:
class Myclass
{
public:
Myclass() = default;
~Myclass() = default;
Myclass(Myclass&&) = default;
Myclass& operator=(Myclass&&) = default;
Myclass(const Myclass&) = delete;
Myclass& operator=(const Myclass&) = delete;
};
Myclass GetObj()
{
Myclass obj;
return obj;
}
Myclass WrapperOfGetObj()
{
Myclass&& Wrapobj = GetObj();
return Wrapobj;
}
int main()
{
return 0;
}
编译时,函数WrapperOfGetObj 在return Wrapobj 上出现错误。错误是
'Myclass::Myclass(const Myclass &)': 试图引用已删除的函数
这意味着它正在尝试调用deleted 复制构造函数。我知道Wrapobj 是左值,当它被返回时,它的行为应该与GetObj 方法中的obj 相同,即在return 时调用移动构造函数。
那它为什么要找拷贝构造函数呢?我在这里错过了什么?
【问题讨论】:
-
您需要使用
std::move()明确地创建一个右值。
标签: c++ c++11 c++14 rvalue-reference