0

(假设我不能使用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 次;它也省略了constand &)。

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

有什么理由更喜欢其中一个吗?

4

1 回答 1

0

把重点放在缩短源代码几句话上不是很好。此外,您使您的operator=阅读变得不可读,它不再是复制操作员……
您应该避免使用后者来节省几句话。

这里有一个帖子,说明

//引用

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

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

要了解为什么这会阻止复制,您必须意识到通过将它们声明为私有,您可以使非会员/朋友无法复制它。这对新手来说不是很明显。当他们尝试复制它时也不会收到错误消息。

//报价结束

于 2013-04-09T20:22:07.407 回答