6

std::set_new_handlerから

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();
    }
}
4

2 に答える 2