2015-10-21 4 views
11

として宣言デストラクタの必要性:デフォルトのデストラクタが必要であるが、その発生は (例えば、ムーブコンストラクタを定義することによって)抑制された、=defaultを使用する場合<a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#note-73">these</a>ガイドラインに従ってデフォルト

移動コンストラクタを持つクラスで、明示的なデフォルトデストラクタなしでコードが整形されないと想像がつきません。

誰かが私に例を見せることができますか?

struct S { 
    S() {}; 
    S(S&&) {}; // move ctor 
}; 

int main() { 
    S s; // there is no need to declare dtor explicitly =default 
} 
+1

Typo? "デフォルト**コンストラクタ**が必要な場合..." – songyuanyao

+1

@songyuanyao私はそうは思わない。セクションは**デストラクタの使い方を説明しています** – alexolut

+2

セクションにいくつかのタイプミス( 'A' /' F''a'/'' 'act'を混ぜてコンパイルできないコードがある) – Jarod42

答えて

7

私はそれが間違いのいくつかの種類になると思い、デフォルトのデストラクタの暗黙的な宣言は、移動コンストラクタの定義とは何の関係もないはずです。規格から

、12.4 $ 4,5デストラクタ[class.dtor]

4クラスには、ユーザーが宣言されたデストラクタを持たない場合、デストラクタは、デフォルトとして暗黙的に宣言 である(8.4)。暗黙的に宣言された デストラクタは、そのクラスのインラインパブリックメンバです。

5 Aがあれば削除されるようXが定義されているクラスのデストラクタをデフォルト:(5.1)

- Xは、 非自明なデストラクタを有する変異体を有するユニオン状のクラスである

(5.2) - 仮想デストラクタのために、又は - 任意の潜在的に構築サブオブジェクトは(またはその アレイ)クラス型Mを有し、Mは、削除デストラクタまたはデフォルトデストラクタから アクセスできないデストラクタ、

(5.3)を有しています、非配列の検索 割り当て解除関数の結果があいまいであるか、デフォルトのデストラクタから が削除されているか、アクセスできない関数になっています。

関連する問題