問題タブ [exception-safety]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 例外安全パラノイア: 多すぎるのはどれくらい?
強力な例外安全保証は、例外が発生した場合、操作によってプログラムの状態が変更されないことを示しています。例外セーフなコピー代入を実装する洗練された方法は、コピー アンド スワップ イディオムです。
私の質問は次のとおりです。
非プリミティブ型を変更するクラスのすべての変更操作にコピー アンド スワップを使用するのはやり過ぎでしょうか?
パフォーマンスは、強力な例外安全性と本当に公正な取引ですか?
例えば:
c++ - 最もシンプルできちんとした c++11 ScopeGuard
Alexandrescu の概念に基づいた単純な ScopeGuard を作成しようとしていますが、c++ 11 のイディオムを使用しています。
使用法は次のとおりです。
私のバージョンは、そこにあるほとんどの例 (Boost ScopeExit など) よりもはるかに短いため、どの専門分野を省略しているのか疑問に思っています。うまくいけば、私はここで 80/20 のシナリオ (20% のコード行で 80% のきちんとしたコードが得られる) にいると思いますが、何か重要なものが欠けているのではないかと考えずにはいられませんでした。このバージョンの ScopeGuard イディオムの言及
ありがとう!
編集コンストラクターで adquire ラムダを取る makeScopeGuard に関する非常に重要な問題に気付きました。adquire ラムダがスローした場合、スコープ ガードが完全に構築されていないため、 release ラムダは呼び出されません。多くの場合、これは望ましい動作ですが、スローが発生した場合にロールバックを呼び出すバージョンも望ましい場合があると感じています。
完全を期すために、テストを含む完全なコードをここに入れたいと思います:
java - Java 例外の安全性を低くすることはできますか?
次のコードが与えられた場合: モデルをロックし、トランザクションを開始する必要があります (例外がスローされる可能性があるため、ロックが解放されていることを確認する必要があります)。次に、データベース接続を取得するようなことを行います (例外がスローされる可能性があります)。 )、次に、トランザクションを元に戻す必要がある例外をスローする可能性のあるいくつかのことを行います。これは Java 6 であるため、Java 7 の優れた機能は利用できません。
これを書き直して、より読みやすく、冗長性を低くすることはできますか?
余談ですが、次のようなものを見たとき、あなたはどうしますか?
c# - C++ 例外と C# 例外
Cleaner、よりエレガント、そして認識しにくいというタイトルの古いブログエントリで、著者は次のように述べています。
C++ では、 C++ 例外は実行中の特定の時点でのみ発生するため、それほど悪くはありません。C# では、いつでも例外を発生させることができます。
彼はそれによって正確に何を意味しますか?
java - 例外仕様、役に立つかどうか?
最初の免責事項: これは「言語戦争」を引き起こすためのものではありません。私は自分のレポートのためにこれ (主題に関する明確化) が本当に必要であり、有効で確固たる議論をしたいだけです.
わかりましたので、ここで質問があります
。C++ では、良いことよりも悪いことを引き起こすと考えられていたため、C++ 11 標準から例外仕様が削除されました。
一方、Java では、例外仕様は何か良いものと見なされています。
これらの 2 つの概念 (例外仕様を持つ目的) は、これら 2 つの言語で異なりますか? そのため、これらの 2 つのコミュニティで異なるように見られているのですか、またはそれらの概念は類似/同一ですか?
どちらですか?例外指定は良いことですか、それとも悪いことですか? または、Java では良いので (ここでいくつかの理由を見たいと思います)、C++ で悪いのは (理由はここにある) からです。
建設的な助けをしてくれた人に感謝します。
c++ - swap() 操作に関する例外の安全性 - 何がそんなに問題なのですか?
swap()
たとえば、次のように、その操作を読み続けます。
Exception-safety を扱っているときに問題があります。
それの何がそんなに悪いのですか?さらに、どうすれば解決できるのでしょうか。
c++ - 標準コンテナとアルゴリズムのすべての例外保証はどこにありますか?
はい、私は見つけたC ++標準(またはドラフト)を調べましたが、STLコンテナーによって提供される例外保証の包括的なものは見つかりませんでした。私が見つけることができるのは、いくつかのタイプのいくつかの関数についての不完全な説明を含む時折のセクションです。または、おそらくそこにありますが、私はそれを見つけていません、私は知りません。
注:基本的にこの質問にある、人々が考えることができるすべての保証のリストを求めているわけではありません。
私はこの情報自体の信頼できる情報源を探しています。あるいは、多かれ少なかれ公式として扱うことができる情報源の無料版(たとえば、標準のドラフト)を探しています。
c++ - uninitialized_copy()は例外安全ですか?
MSDNや他の場所uninitialized_copy
では、これは強力な例外保証を提供すると言っていますが、他のC++参照はそうではありません。
これは実際にC++によって保証されていますか?