【问题标题】:What is the best syntax to declare a class as noncopyable?将类声明为不可复制的最佳语法是什么?
【发布时间】:2013-04-09 20:13:47
【问题描述】:

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

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

有什么理由比另一个更喜欢一个吗?

【问题讨论】:

    标签: syntax c++03 noncopyable


    【解决方案1】:

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

    有一个帖子here,说明

    //报价

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

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

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

    //引号结束

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 2019-11-15
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2017-10-05
      • 2010-12-30
      相关资源
      最近更新 更多