3

メモリを動的に割り当てる必要があるクラスを設計しようとしています..

構築中に必要なメモリを割り当てる予定でしたが、失敗したメモリ割り当てをどのように処理すればよいですか? 例外をスローする必要がありますか? 例外は「例外的な」ケースにのみ使用する必要があることをどこかで読みましたが、メモリ不足は私にとって例外的なケースではないようです..

代わりに別の初期化ルーチンでメモリを割り当て、エラーをチェックしてから、クラス インスタンスを正常に破棄する必要がありますか?

または、代わりに例外を使用する必要がありますか? これらのメモリ割り当てが失敗した場合、クラスは何の役にも立ちません..


編集:コンセンサスは、メモリ不足は例外的なケースであるということです。

これについてどうやって行くか見ていきます..ありがとう.. :)

4

3 に答える 3

15

new を使用してメモリを割り当て、演算子をオーバーライドしていないと仮定すると、メモリを適切に割り当てることができない場合new、自動的に例外がスローされます。std::bad_alloc

例外は「例外的な」ケースにのみ使用する必要があることをどこかで読みましたが、メモリ不足は私にとって例外的なケースではないようです..

メモリ不足は私にとってかなり例外的なケースのようです:)

このような状況を処理することは非常に困難です。アプリケーションのユーザーに意味のあるエラーを返したいと思うかもしれませんが、それがメモリ不足に起因する問題である場合、エラー メッセージを割り当てるためのメモリを確保する余裕さえないかもしれません。それは本当にキャッチ 22 状況のビットです。

アプリケーションの起動時にメモリのチャンクを割り当てる防御的なプログラミング手法 (メモリ パラシュートまたは雨の日の資金と呼ばれることもあります) があります。その後、例外を処理するときに、bad_allocこのメモリを解放し、利用可能なメモリを使用してアプリケーションを正常に終了します。これには、ユーザーに意味のあるエラーが表示されることも含まれます。これは、クラッシュするよりもはるかに優れています:)

于 2009-02-25T03:33:46.850 に答える
3

メモリ不足 (特にヒープ メモリ) は例外的なケースであり、クラス、さらにはアプリケーションが続行できない場合は、例外のスロー/処理が非常に適切で適切なアプローチだと思います。

于 2009-02-25T03:33:31.483 に答える
1

メモリ不足の場合の C++ での通常の動作は、例外をスローすることです。組み込みnew演算子はデフォルトでこれを行います。

于 2009-02-25T03:32:24.483 に答える