new handler 問題的筆記

2021-06-16 17:42:59 字數 751 閱讀 6024

void outofmem() 

int main() 

不太懂這裡為什麼呼叫

set_new_handler就能儲存outofmem

感覺好奇怪,看了下vs裡面原始碼發現了

// handler.cpp -- set_new_handler for microsoft

#include

typedef int (__cdecl *new_hand)(size_t);

new_hand __cdecl _set_new_handler(new_hand);

_std_begin

static new_handler _new_handler; //儲存了set_new_handler傳進來的引數

int __cdecl _new_handler_inte***ce(size_t) _throw1(std::bad_alloc)

_crtimp2 new_handler __cdecl set_new_handler(new_handler pnew) _throw0()

new_handler _crtimp2 __cdecl set_new_handler

( int pnh 

) throw()

_std_end

每次呼叫自定義的函式給set_new_handler後,都會把引數的函式傳給靜態函式_new_handler ,這樣new失敗後,每次都呼叫_new_handler函式,就可以做到設定自定義函式來處理new失敗的情形

了解new handler的行為

1.當operator new 無法滿足某一記憶體需求時,他會丟擲異常。以前它會返回乙個null指標,一些老的編譯器目前也會這樣做。當operator new 丟擲異常以反映乙個為滿足的記憶體需求之前,它會先呼叫乙個客戶指定的錯誤處理函式,乙個所謂的new handler。當operator new...

C 了解new handler的所作所為

1.在使用operator new申請記憶體失敗後,編譯器並不是不做任何的努力直接丟擲std bad alloc異常,在這之前,它會呼叫乙個錯誤處理函式 new handler 2.new handler函式的處理方式策略 1 operator new會進行多次的記憶體分配嘗試,這可能會使其下一次的...

動態規劃問題的筆記

組合問題公式 dp i dp i num true false問題公式 dp i dp i or dp i num 最大最小問題公式 dp i min dp i dp i num 1 或者dp i max dp i dp i num 1 以上三組公式是解決對應問題的核心公式。當然拿到問題後,需要做到...