是否有 std::noncopyable(或等同物)?

Is there a std::noncopyable (or equivalent)?

有一本 boost::noncopyable,我的图书馆里有我自己的不可复制的 class。最新的 C++ 标准中是否有 std::noncopyable 或等价物?

这是一件小事,但从这样一个 class 中推导出来会使意图更加清晰。

不,因为有一种标准方法可以使 class 不可复制:

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

不可复制的 class 可以通过从 MyClass&&.

重载构造函数来使其可移动

使 class 不可复制(以上)的声明可以在 public 或私有部分中。

如果您真的不想每次都输入所有内容,您可以随时定义一个宏,例如:

#define NONCOPYABLE(Type) Type(const Type&)=delete; Type& operator=(const Type&)=delete

class MyClass
{
    NONCOPYABLE(MyClass);

    // etc.
};



  

我相信你已经通过阅读 CashCow 的 post 弄明白了,但我想我也可以为不可复制的 classes 提供一个基础 class。

class Noncopyable {
public:
    Noncopyable() = default;
    ~Noncopyable() = default;

private:
    Noncopyable(const Noncopyable&) = delete;
    Noncopyable& operator=(const Noncopyable&) = delete;
};