C & C++ FAQ
|
C++ | どうすればクラス型オブジェクトのコピーを抑制できますか。 |
C++11では、コンパイラが暗黙裏に提供する特殊メンバ関数をユーザに利用させないようにすることを明示的に宣言できる手段が用意されています。具体的には、メンバ関数の宣言に“= delete”を付加します。プログラム例を以下に示します。class X { private: X(X&); // コピーコンストラクタ X& operator=(const X&); // 代入演算子 public: // 中略 };
class X { public: X(X&) = delete; // コピーコンストラクタ X& operator=(const X&) = delete; // コピー代入演算子 X(X&&) = delete; // ムーブコンストラクタ X& operator=(const X&&) = delete; // ムーブ代入演算子 // 中略 };