読者です 読者をやめる 読者になる 読者になる

new 演算子の例外

(もうちょっとちゃんと書く かもしれない)
new 演算子でメモリを確保するときに投げられる例外は,
bad_alloc

try{
  int x = new int[100];
}catch(bad_alloc ba){
  cout << "メモリ割り当てエラー" << endl;
  cout << ba.what();
  return NULL;
  //exit(1);
}
// NULLが返ってきた時用
if(x == NULL){
  cout << "メモリ割り当てエラー" << endl;
  return NULL;
  //exit(1);
}

コンパイラによっては例外が投げられず,ただ,単にNULLがかえってくるものもある.
new(nothrow)
とするとnewでも例外を投げずにNULLを返すようになる.

int x = new(nothrow) int[100];
// 割り当てられなかったときはNULLしか返ってこないので,これだけ
if(x == NULL){
  cout << "メモリ割り当てエラー" << endl;
  return NULL;
  //exit(1);
}