BohYoh.comトップページへ
C & C++ FAQ
目次

C++ どうすればクラス型オブジェクトのコピーを抑制できますか。

 クラス型オブジェクトのコピーを抑制する(コピーできなくする)には、そのクラス型のコピーコンストラクタと代入演算子を無効化してユーザが利用できなくなるようにする必要があります。
 C++11以前では、コピーコンストラクタと代入演算子をprivateと宣言することで実現できます(コピーコンストラクタと代入演算子が非公開となるため、ユーザがそれらのメンバ関数を利用できなくなります)。以下に示すのが、そのプログラム例です。

class X { private: X(X&); // コピーコンストラクタ X& operator=(const X&); // 代入演算子 public: // 中略 };

 C++11では、コンパイラが暗黙裏に提供する特殊メンバ関数をユーザに利用させないようにすることを明示的に宣言できる手段が用意されています。具体的には、メンバ関数の宣言に“= delete”を付加します。プログラム例を以下に示します。

class X { public: X(X&) = delete; // コピーコンストラクタ X& operator=(const X&) = delete; // コピー代入演算子 X(X&&) = delete; // ムーブコンストラクタ X& operator=(const X&&) = delete; // ムーブ代入演算子 // 中略 };



戻る

BohYoh.comロゴ