web-dev-qa-db-ja.com

std :: noncopyable(または同等のもの)はありますか?

boost :: noncopyable があり、ライブラリに自分のコピー不可能なクラスがあります。最新のC++標準にstd :: noncopyableまたは同等のノックアラウンドはありますか?

小さなことですが、そのようなクラスから派生させることで、意図がより明確になります。

22
Robinson

いいえ、クラスをコピー不可にする標準的な方法があるためです。

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

ただし、コピー不可のクラスは、MyClass&&からコンストラクタをオーバーロードすることで移動可能にすることができます。

(上記の)クラスをコピー不可にする宣言は、パブリックセクションまたはプライベートセクションにあります。

19
CashCow

CashCowの投稿を読んですでにそれを理解していると思いますが、私はコピー不可能なクラスの基本クラスを提供することもできると思いました。

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

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