2017-07-03 9 views
4

何もしない仮想デストラクタは、C++ 11 we can alternatively say以来仮想デストラクタ=デフォルトと空のボディに違いはありますか?

virtual ~ClassName() {} 

です:

virtual ~ClassName() = default; 

は、これら二つの間のいずれかの違いはありますか?

+0

@ Rakete1111:実際には重複していません。なぜなら、他の質問はパブリックになっているデフォルトのデストラクタですから、これは基本クラスで必要な仮想デストラクタで{}の代わりに{default}仮想メンバー機能を持つ私は同じことを思っていました。つまり、コンパイラが= defaultを使って多分多分最適化できるのであれば、それは単なるもっと慣用的なC++です。結局のところ、入力する文字数はかなり多かったです。 – Masseman

+0

@Massemanはい、彼らは完全に同等ではありません。しかし、彼らはデストラクタに '{}'や '= default; 'を使うべきか同じ質問をしますか?デストラクタがバーチャルであることは問題ではありません。なぜなら、それはその問題に関するものではないからです。 – Rakete1111

答えて

4

主な違いは、それらが削除されている状況下で指定不履行関数のルール(参照のISOのC++ 14(N4296)8.4、12.1、12.4、12.8)

8.4があることです。 2.5:明示的にデフォルトされた関数と暗黙的に宣言された関数を総称してデフォルト関数といい、 実装はそれらの暗黙の定義を提供しなければならない(12.1 12.4、 12.8)。

例えば:

12.4.5:削除されたかのように、クラスXのための不履行デストラクタが定義されている: (5.1) - Xが有する変異体を有するユニオン状のクラスであります (5.2) - 潜在的に構築されたサブオブジェクト はクラスタイプM(またはその配列)を持ち、Mは削除されたデストラクタを持っているか、またはデフォルトのデストラクタからアクセスできないデストラクタ()仮想デストラクタ、非配列解放の検索 関数の結果曖昧さやあなたの使用がdefaultdeleteではありません{}一方を使用するのと同じになります使用して、削除されたカテゴリのいずれかに該当する場合は、削除または不履行デストラクタ

から アクセスできないれる機能インチ

関連する問題