CString s("ok");
CString alpha=move(s);
使用这个确切的代码,编译器使用复制构造函数来初始化alpha ...!
但是当我明确定义移动构造函数时,它使用移动构造函数并根据需要完成工作......!
问题是当你有一个关键字Move,甚至使用move关键字(不是自己定义一个移动构造函数)时,它仍然使用复制构造函数...为什么,移动构造函数的默认编码是什么?当我们这边没有定义Move构造函数时,move关键字有什么用?..
答案 0 :(得分:2)
如果提供用户定义的复制构造函数,赋值运算符或析构函数,则编译器不会提供默认移动构造函数。假设如果您需要特殊的逻辑来复制或销毁对象,那么您可能需要特殊的逻辑来进行移动,而简单地使用默认值可能会很危险。如果不这样做,您可以明确告诉编译器提供默认的移动构造函数。
struct CString
{
CString(const CString& other)
{
// Do whatever
}
CString(CString&&) = default;
};
小心这样做。对于字符串包装器,您可能需要在移动构造函数中设置指向nullptr
的指针,以避免双重删除。