0

を使用して大量のメモリが動的に割り当てられると、が返されるnewため、プログラムがクラッシュする可能性があります。例外を使用すると、std::bad_alloc をキャッチして最適な処理を実行できます。newNULL

try{
     allocate_much_memory();                
catch( std::exception e){       
     do_something_that_fits();  
}

何らかの理由で例外を使用できない場合は、以下を確認する必要がありますNULL

BigBlob* allocate_much_memory(){
   BigBlob *bblob = new BigBlob();
   if( bblob == NULL ){
        std::cerr << "uh-oh" << std::endl;
        handle_error();
   }
   return bblob;
}

ポイントは、私が理解している限り、自分で NULL のチェックを作成する必要があるということです。サードパーティのライブラリからのものであるために関数を変更できず、例外を使用しない場合、何ができますか?

更新:new BigBlob()の結果が:であるかどうかを確認している部分については、NULL必要ありません: p = new Fred() の後に NULL を確認する必要がありますか? を参照してください。(古い) コンパイラに new を自動的にチェックさせて NULL が返されるかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

1

例外がスローされた場合は、次の場所に移動します。

C++ でのグローバル例外処理

そうでない場合、あなたはうんざりしています。

これにも理由があります。考えてみてください。このライブラリの割り当てがどこにあるのかをどのように知ることができますか? 失敗したらどうしますか?その最後のものは特に重要です。クラッシュ以外に何をしますか?

于 2013-08-20T22:37:46.430 に答える