C ++コア原則C.37:デストラクタが例外をスローしないようにします

C.37:メイクデストラクタnoexcept

C.37:例外デストラクタを投げていないことを確認し

 

 

理由(理由)

 

デストラクタは失敗しないことがあります。デストラクタが例外で終了しようとすると、それは悪い設計の誤りだとプログラムが終了した方がいい。

すべてのデストラクタが失敗することはできません。デストラクタは例外を終了しようと投げた場合、これは重大な設計上のエラーで、より良い選択は、プログラムを停止することです。

Note(注意)

 

そのクラスのすべてのメンバーがnoexceptのデストラクタを持っている場合(独立したコードは、その本体であるものの)デストラクタ(いずれかのユーザー定義またはコンパイラで生成された)が暗黙的に宣言されてnoexcept。明示的にクラスメンバの追加や修正を通じてデストラクタのnoexcept、暗黙的にnoexcept(偽)になってデストラクタに対する著者の警備員をマークすることによって。

クラスデストラクターのすべてのメンバーがnoexceptある場合、そのデストラクタは、(ユーザー定義またはコンパイラが生成したかどうか)暗黙的にnoexcept(および関数本体内の特定のコードのこのかかわらず)と定義します。デストラクタクラスのメンバーはnoexcpetになるように変更することはできませんので、明示的に定義されたデストラクタnoexceptすることにより、それを防止することができます。

実施例(実施例)

 

いないすべてのデストラクタは、デフォルトではnoexceptです。1つの投げメンバー毒全体のクラス階層

いないすべてのデストラクタがデフォルトnoexceptある;(デストラクタ、翻訳者注)長い例外のメンバーがスローされると、それは継承のシステム全体を弱体化させるだろう。

構造体X {

    詳細は、x; //投げデストラクタを持つことが起こります

    // ...

    〜X(){} //暗黙noexcept(偽)。別名投げることができます 

}。

スワイプは、より多くのを見て左または右

だから、疑問がある場合は、デストラクタnoexceptを宣言。

疑問がある場合はこのように、デストラクタがnoexceptのように定義されます。

Note(注意)

 

なぜ、noexceptすべてのデストラクタを宣言しませんか?特に、簡単な例 - - 混乱を邪魔することは、多くの場合になるから。

なぜ、すべてのデストラクタがnoexceptのように定義されていませんか?そのため、多くの場合、簡単な例がそうすることが特にためにのみ干渉情報を増加します。

施行(提案)

 

(シンプル)Aのデストラクタを宣言する必要がありnoexcept、それは投げることができれば。

(単純な)リスク次いでデストラクタがnoexceptとして定義され、存在する場合に例外をスローします。

もともとリンク

 

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c37-make-destructors-noexcept

 


 

私はこの記事は参考になりましだと思いますか?ようこそ親指アップし、より多くの人と共有することができます。

より多くの更新の記事を読む、オブジェクト指向の考え方のマイクロチャンネル公衆数にしてください注意を払います[]

公開された408元の記事 ウォンの賞賛653 ビュー290 000 +

おすすめ

転載: blog.csdn.net/craftsman1970/article/details/104379215