問題タブ [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.
memory-management - パニックが発生したときにデストラクタが実行されるのはなぜですか?
Rust プログラムがパニックした場合、パニック キャッチャーがないと仮定すると (しばらくの間はありませんでした)、デストラクタを実行せず、プロセス後に OS をクリーンアップさせるだけで安全で問題ありません。Rust がスレッドをほどくのはなぜですか?
私が考えることができる唯一の理由は、メモリを再利用する OS がない場合ですが、そのニッチを除けば不要のようです。
c++ - オブジェクトを std::vector に移動するときの例外保証
オブジェクトを std::vector に移動しているときにメモリ割り当てが失敗し、bad_alloc がスローされた場合、std::vector は、移動されたオブジェクトが変更されていない/まだ有効であることを保証しますか?
例えば:
c++ - メモリ不足エラーの場合に例外の安全性を提供するために、コードを読みにくくする価値はありますか?
Item
一意であると想定されているため、コピーできない s を含むゲームがあります。
class Creature
を受け取り、Item
それを自分の に追加することができinventory
ます:
このアプローチは素晴らしくきれいに見えますが、小さな問題があります。コードの一部が後で回復でき、 'sstd::bad_alloc
によってスローされたものをキャッチした場合、ゲーム内のロジックは未定義です。失われるだけです。さらに、この可能性のためだけに指定子を削除する必要があります。recieve_item()
push_back()
Item
noexcept
したがって、この方法で例外の安全性を提供できます (間違っている場合は指摘してください)。
ただし、現在、新しい欠点があります。
std::move()
呼び出し元のコードに がないため、item
;を移動したという事実がわかりにくくなります。- 「resize(+1)」の部分は見苦しく、コード レビュー中に誤解される可能性があります。
質問はタイトルにあります。このような奇妙なケースでも例外の安全性は良い設計と見なされますか?