(假设我不能使用为此目的而明确设计的boost::noncopyable
)
(假设我不能使用C ++ 11)
当使类不可复制时,我通常会看到以下语法:
class MyClass
{
public:
...
stuff
...
private:
MyClass(const MyClass&); // disables the copy constructor
MyClass& operator=(const MyClass&); // disables the copy assignment operator
};
这种语法似乎很冗长。我想我可以使用以下代码:
MyClass(MyClass&); // disables the copy constructor
void operator=(MyClass); // disables the copy assignment operator
这似乎更短(它只重复了3次,而不是4次;它也忽略了const
和&
)。
我的语法与其他语法完全相同吗?
有没有理由更喜欢一个而不是另一个?
答案 0 :(得分:0)
强调缩短源代码几句话并不是很好。此外,你使operator=
不可读,不再是复制操作员......
你应该避免使用后者来保存一些单词。
有一篇帖子here,陈述
// QUOTE
class MyClass
{
private:
MyClass(const MyClass&) {}
MyClass& operator=(const MyClass&) {}
};
如果你是一名C ++程序员,他已经阅读了关于C ++的介绍性文章,但很少接触惯用的C ++(即:很多C ++程序员),这就是......令人困惑。它声明了复制构造函数和复制赋值运算符,但它们是空的。那么为什么要宣布它们呢?是的,它们是私有的,但这只会引发更多问题:为什么要将它们变为私有?
要理解为什么这会阻止复制,你必须意识到通过将它们声明为私有,你必须这样做,以便非成员/朋友不能复制它。这对新手来说并不是很明显。它们在尝试复制时也不会出现错误消息。
// QUOTE END