c++ 是否有std::noncopyable(或等效)?

qpgpyjmq  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(170)

有一个boost::noncopyable,我的库中有我自己的不可复制类。在最新的C++标准中是否有std::noncopyable或等效的东西?
这是一件小事,但从这样一个类派生使意图更加清晰。

sqyvllje

sqyvllje1#

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

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

然而,一个不可复制的类可以通过重载MyClass&&的构造函数而变得可移动。
使类不可复制的声明(如上所述)可以在public或private部分。
如果你真的不想每次都输入所有这些,你可以定义一个宏,比如:

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

class MyClass
{
    NONCOPYABLE(MyClass);

    // etc.
};
bzzcjhmw

bzzcjhmw2#

我相信你已经通过阅读CashCow的文章了解了这一点,但我想我也可以为不可复制的类提供一个基类。

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

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

相关问题