クラス X がクラス Y から派生し、クラス Y が次のいずれかを持つ場合:
- ユーザー宣言のコピー コンストラクター
- ユーザー宣言のコピー代入演算子、
- ユーザー宣言のデストラクタ
- ユーザー宣言のムーブ コンストラクター
- ユーザー宣言の移動代入演算子、
上記のいずれも宣言しない場合、移動コンストラクターと移動代入演算子は、クラス X に対して暗黙的にデフォルト設定されますか?
例えば
struct Y
{
virtual ~Y() {}
// .... stuff
};
struct X : public Y
{
// ... stuff but no destructor,
// no copy/move assignment operator
// no copy/move constructor
// will X have a default move constructor / assignment operator?
};
私は現在 gcc を使用していますが、主に正しい動作がどうあるべきか (特定のコンパイラが標準に準拠しているかどうかではなく) に関心があります。