我在 C++ 入门第 5 版的最后一个附录中。(解决方案部分):
这是那里的一个例子:
假设
Y
是一个定义了自己的复制构造函数但没有移动构造函数的类struct hasY{ hasY() = default; hasY(hasY&&) = default; Y mem; // hasY will have a deleted move constructor }; hasY hy, hy2 = std::move(hy); // error: move constructor is deleted
我添加了以下定义struct Y
:
struct Y{
Y() = default;
Y(Y const&){cout << "Y's cpy-ctor\n";}
};
当我运行程序时,它工作得很好,并且不会抱怨
hasY
删除的移动构造函数。我得到输出:Y's cpy-ctor
所以我认为这是可行的,因为类型
Y
的对象是通过复制构造函数移动的,而不是相反的。因此调用hasY
'move-ctor 调用Y
'move-ctor 被删除然后编译器使用Y
'copy-ctor 移动该元素。我对吗?引导我。谢谢!