new-handler 関数は、メモリ割り当ての試行が失敗するたびに、割り当て関数によって呼び出される関数です。その意図された目的は、次の 3 つのいずれかです。
- より多くのメモリを利用可能にする
- プログラムを終了します (たとえば、std::terminate を呼び出して)
- タイプ std::bad_alloc または std::bad_alloc から派生した例外をスローします
次のオーバーロードは何かを保証しますか?
void * operator new(std::size_t size) throw(std::bad_alloc){
while(true) {
void* pMem = malloc(size);
if(pMem)
return pMem;
std::new_handler Handler = std::set_new_handler(0);
std::set_new_handler(Handler);
if(Handler)
(*Handler)();
else
throw bad_alloc();
}
}