もともとはデストラクタについての質問としてこれを投稿しましたが、今はデフォルトのコンストラクタの考慮を追加しています。元の質問は次のとおりです。
クラスに仮想のデストラクタを与えたいが、それ以外はコンパイラが生成するものと同じである場合は、次のように使用できます
=default
。class Widget { public: virtual ~Widget() = default; };
しかし、空の定義を使用して入力を減らすことで同じ効果を得ることができるようです:
class Widget { public: virtual ~Widget() {} };
これらの2つの定義が異なる動作をする方法はありますか?
この質問に投稿された回答に基づくと、デフォルトのコンストラクタの状況は似ているようです。デストラクタの「=default
」と「{}
」の意味にほとんど違いがないことを考えると、デフォルトのコンストラクタのこれらのオプションの意味にも同様にほとんど違いはありませんか?つまり、そのタイプのオブジェクトが作成されて破壊されるタイプを作成したいと仮定すると、なぜ私は言いたいのですか?
Widget() = default;
の代わりに
Widget() {}
?
元の投稿後にこの質問を拡張すると、SOのルールに違反することになります。デフォルトのコンストラクタについてほぼ同じ質問を投稿することは、あまり望ましくない選択肢であると私を思いました。
std::has_trivial_destructor<Widget>::value
はそうですtrue
がfalse
、2番目はそうです。それが何を意味するのか私にもわかりません。:)
= default
より明示的なimoであり、コンストラクターによるそれのサポートと一貫しています。