newでメモリ確保に失敗したときはbad_alloc例外が投入される。
私はてっきりNULLを返すと思っていたけど、それはC++ができた初期のころだけだったらしい。
実際に試してみたコード。
#include <iostream> using namespace std; void main() { int* p; for(int i=0; i<1000; i++) { try { p = new int[100000000]; } catch (bad_alloc xa) { cout << p << endl; return; } cout << p << endl; } }
実行結果
00408CA2 007B0020 18530020 302B0020 302B0020
最後のpの値が変わっていないことから、やっぱりNULLは返していないらしい。
と思ったが、newが失敗した時点で例外でcatchのブロックに飛んでしまうからpの値は更新されないのか。
試しに例外を取らないようにしてみたが、newが失敗した時点でプログラムが異常終了してしまうので確認できなかった。