C ++で削除された関数



C Deleted Function



削除された関数

削除された関数はそのような関数です。宣言されていても使用することはできず、デストラクタを削除された関数として定義することはできません。次のコードは、コピーコンストラクターとコピー代入演算子を削除された関数として定義することにより、コピーをブロックします。

class Person { public: const char* name_ Person(const char* name):name_(name) {} Person(const Person& person) = delete Person& operator=(const Person& person) = delete }

コンパイラが合成した関数は削除される場合があります。

クラスに、デフォルトで構築、コピー、割り当て、または破棄できないデータメンバーがある場合、対応するメンバー関数は削除済みとして定義されます。



  • クラスのメンバーのデストラクタが削除されているか、アクセスできない場合(たとえば、private)、クラスの合成デストラクタと合成コピーコンストラクタは削除済みとして定義されます。
  • クラスのメンバーのコピーコンストラクターが削除されているか、アクセスできない場合、クラスの合成コピーコンストラクターは削除されるように定義されています。
  • クラスの合成コピー割り当て演算子は、クラスのメンバーのコピー割り当て演算子が削除されているかアクセスできない場合、またはクラスにconstまたは参照メンバーがある場合に削除されるように定義されています。
  • クラスのメンバーのコンストラクターが削除されているかアクセスできない場合、クラスに初期値を持たない参照メンバーがある場合、またはconstメンバーにクラスとそのタイプの初期値がない場合デフォルトでは明示的に定義されていませんこのクラスのデフォルトコンストラクタであるコンストラクタは、削除されるように定義されています。

プライベートアクセス制御

C ++ 11より前は、コピーコンストラクターとコピー代入演算子をpriavteとして宣言することにより、クラスがブロックされていました。これらはプライベートであるため、ユーザーコードはこのタイプのオブジェクトをコピーできませんが、フレンド関数とメンバー関数はコピーできます。したがって、コピーコンストラクターとコピー代入演算子をプライベートとして宣言しますが、定義はしません。メンバー関数を宣言するが定義しないことは合法です。未定義のメンバーにアクセスしようとすると、リンク時エラーが発生します。