【发布时间】:2017-11-24 02:19:51
【问题描述】:
struct copyable { // and movable
copyable() = default;
copyable(copyable const&) { /*...*/ };
copyable& operator=(copyable const&) { /*...*/ return *this; }
};
由于复制构造函数和复制赋值操作函数是显式定义的,这意味着移动构造函数和移动赋值函数不能被编译器隐式定义,因此不允许移动操作。
请问我上面的理解是否正确?
【问题讨论】:
-
移动可以看作是不需要保留原始变量的特殊情况。保留原始变量(如复制)不会使移动无效。
-
为伯纳德的评论添加更多细节:移动后,源变量不能保证为空。 (有些对象甚至可能没有“空”的概念。)当然,它可以是空的,或者它可以是不变的,或者它可以是完全不同的东西,例如它现在可以具有先前在目标变量中的值(在赋值的情况下)。在std::string的情况下,如果是移动前的长字符串,它通常是空的,如果是短字符串,它通常是空的。
标签: c++ c++11 move-semantics