LoginSignup
8
8

More than 5 years have passed since last update.

C++11の特殊メソッド自動生成ルール

Posted at

特殊メソッド?

コンパイル時にルールに従って自動的にclassに追加されるメソッドの事。
C++11より前は4つでしたがC++11でムーブ演算が追加され5つになりました。
その影響かどうかはわかりませんがメソッドの自動生成ルールが変更されている部分があるのでそれをまとめてみます。

※単語について
コピー演算 = コピーコンストラクタ と コピー代入演算子 の事。
ムーブ演算 = ムーブコンストラクタ と ムーブ代入演算子 の事。

デフォルトコンストラクタ

前と同じでコンストラクタを宣言しないクラスの場合にのみ生成される。

デストラクタ

デフォルトで noexcept になる点以外は前と同じ。

コピーコンストラクタ

コピーコンストラクタを宣言しないクラスの場合にのみ生成される。
ムーブ演算を宣言したクラスの場合は生成されない。
コピー代入演算子やデストラクタを宣言したクラスに対するコピーコンストラクタの自動生成は非推奨。

コピー代入演算子

コピー代入演算子を宣言しないクラスの場合にのみ生成される。
ムーブ演算を宣言したクラスの場合は生成されない。
コピーコンストラクタやデストラクタを宣言したクラスに対するコピー代入演算子の自動生成は非推奨。

ムーブコンストラクタ および ムーブ代入演算子

C++11から追加された特殊メソッド。
コピー演算と違い、片方を宣言した場合もう片方は自動生成されなくなる。

コピー演算、ムーブ演算、デストラクタのいずれも宣言しないクラスの場合にのみ生成される。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8