2017-10-26 2 views
0

我々は[]の動作が保証されているを削除したり、削除し、C++言語では、コードレビューで、私は以下のコードレビューアを1としてC++でdelete []またはdelete操作に必要なtry-catchを使用していますか?

void FreeResourceForElements(void) 
{ 
    try 
    { 
     delete[] m_cpMemPool; 
    } 
    catch(...) 
    { 
     // statement for printing error message in log 
    } 
} 

ためレビュアーからこの質問を得たVisual Studio 2005でアプリケーションを開発しています例外をスローしないため、ここでtry-catchを使う必要はなく、catchブロックはデッドコードになります。しかし、私は彼の見解を確認するための標準的な参照のためにインターネットで検索したとき、残念ながら私は何も見つけることができませんでした。私はこの質問をここに置いています。お知らせ下さい。

+4

デストラクタは投げないのが一般的ですが、C++以降ではデフォルトはありません。しかし、それはまだ完全にクラスに依存しています。したがって、「削除」がスローされないという正式な保証はありませんが、そのような実務上の保証が存在する可能性があります。 –

答えて

4

delete[]は、各配列要素のデストラクタを呼び出します。コードベースに、デストラクタがnoexceptでなければならない、またはデストラクタから伝播するのを防ぐために例外を処理しなければならないルールがある場合、そのルールは実際に実行されます(try-catchブロックにdelete[]を入れる必要はありません)。

+0

素早く対応してくれてありがとう、配列オブジェクトの型が組み込み型(char)の場合、それは必須ですか? –

+0

@VKrishnaRaoRacharlaその場合、例外をスローすることはできません – Brian

関連する問題