将类声明为noncopyable的最佳语法是什么?

时间:2013-04-09 20:13:48

标签: syntax c++03 noncopyable

(假设我不能使用为此目的而明确设计的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&)。

我的语法与其他语法完全相同吗?

有没有理由更喜欢一个而不是另一个?

1 个答案:

答案 0 :(得分:0)

强调缩短源代码几句话并不是很好。此外,你使operator=不可读,不再是复制操作员......
你应该避免使用后者来保存一些单词。

有一篇帖子here,陈述

// QUOTE

class MyClass
{
private:
    MyClass(const MyClass&) {}
    MyClass& operator=(const MyClass&) {}
};

如果你是一名C ++程序员,他已经阅读了关于C ++的介绍性文章,但很少接触惯用的C ++(即:很多C ++程序员),这就是......令人困惑。它声明了复制构造函数和复制赋值运算符,但它们是空的。那么为什么要宣布它们呢?是的,它们是私有的,但这只会引发更多问题:为什么要将它们变为私有?

要理解为什么这会阻止复制,你必须意识到通过将它们声明为私有,你必须这样做,以便非成员/朋友不能复制它。这对新手来说并不是很明显。它们在尝试复制时也不会出现错误消息。

// QUOTE END

相关问题