为了禁用我的类的复制,我想将其声明为私有但不定义operator=(const MyClass&)
和MyClass(const MyClass&)
- 我是否还必须为此类禁用move ctor?
答案 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来说,没有必要隐藏它。它们没有专门讨论默认移动赋值运算符,但我认为它们也不会生成一个。