移动ctor困境

时间:2010-11-23 10:13:46

标签: c++ c++11 move-semantics

为了禁用我的类的复制,我想将其声明为私有但不定义operator=(const MyClass&)MyClass(const MyClass&) - 我是否还必须为此类禁用move ctor?

2 个答案:

答案 0 :(得分:5)

仍然需要讨论是否隐式生成移动构造函数(以及何时)。

请参阅2010-10-17中Stroustrup的this PDF,副标题默认情况下是否应生成移动操作?

BTW,在C ++ 0x中你可以= delete运行而不是使它们私有化和未定义。

class non_copyable {
    public:
    non_copyable(const non_copyable&) = delete;
    non_copyable& operator=(const non_copyable&) = delete;
};

答案 1 :(得分:0)

引用VS 2010 documentation

  

与默认的复制构造函数不同,   编译器没有提供   默认移动构造函数。

因此对于VS 2010来说,没有必要隐藏它。它们没有专门讨论默认移动赋值运算符,但我认为它们也不会生成一个。