2

为了禁用我的类的复制,我假设声明为私有但未定义operator=(const MyClass&),并且MyClass(const MyClass&)- 我是否还必须禁用该类的移动 ctor?

4

2 回答 2

5

是否会隐式生成移动构造函数(以及何时生成)仍有待讨论。

请参阅Stroustrup 于 2010 年 10 月 17 日撰写的此 PDF ,其字幕应默认生成移动操作吗?

顺便说一句,在 C++0x 中,您可以= delete使用函数而不是使它们私有和未定义。

class non_copyable {
    public:
    non_copyable(const non_copyable&) = delete;
    non_copyable& operator=(const non_copyable&) = delete;
};
于 2010-11-23T11:26:44.957 回答
0

引用VS 2010 文档

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

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

于 2010-11-23T14:12:15.810 回答