默认情况下移动构造函数

时间:2017-12-12 19:08:47

标签: c++ visual-c++ c++builder

CString s("ok");
CString alpha=move(s);

使用这个确切的代码,编译器使用复制构造函数来初始化alpha ...!

但是当我明确定义移动构造函数时,它使用移动构造函数并根据需要完成工作......!

问题是当你有一个关键字Move,甚至使用move关键字(不是自己定义一个移动构造函数)时,它仍然使用复制构造函数...为什么,移动构造函数的默认编码是什么?当我们这边没有定义Move构造函数时,move关键字有什么用?..

1 个答案:

答案 0 :(得分:2)

如果提供用户定义的复制构造函数,赋值运算符或析构函数,则编译器不会提供默认移动构造函数。假设如果您需要特殊的逻辑来复制或销毁对象,那么您可能需要特殊的逻辑来进行移动,而简单地使用默认值可能会很危险。如果不这样做,您可以明确告诉编译器提供默认的移动构造函数。

struct CString
{
    CString(const CString& other)
    {
        // Do whatever
    }

    CString(CString&&) = default;
};

小心这样做。对于字符串包装器,您可能需要在移动构造函数中设置指向nullptr的指针,以避免双重删除。