了解new handler的行為

2021-10-22 17:20:21 字數 987 閱讀 8998

1.當operator new 無法滿足某一記憶體需求時,他會丟擲異常。以前它會返回乙個null指標,一些老的編譯器目前也會這樣做。當operator new 丟擲異常以反映乙個為滿足的記憶體需求之前,它會先呼叫乙個客戶指定的錯誤處理函式,乙個所謂的new-handler。當operator new 無法滿足記憶體申請時,它不斷呼叫new-handler函式,直到找到足夠的記憶體。那麼只要是設計乙個良好的new-handler就要做一下的這些事情。

(1)讓更多的記憶體可以被使用。

(2)安裝另乙個new-hanlder。

(3)卸除new-handler。

(4)丟擲bad_alloc的異常。

(5)不返回,通常呼叫abort和exit。

「mixing」風格的base class:

```cpp

template

<

typename t>

class

newhandlersupport

;template

<

typename t>

std::new_handler newhandlersupport

::currenthandler =0;

template

<

typename t>

std::new_handler

newhandlersupport

::set_new_handler

(std::new_handler p)

throw()

template

<

typename t>

void

* newhandlersupport

::operator

new(std::size_t size)

throw

(std::bad_alloc)

條款49中關於new handler行為

當operator new無法滿足某一記憶體分配時,就會丟擲一次。以前它會返回null指標,現在某些舊式編譯器也還這麼做。namespace std new handler是個函式指標,該函式沒有引數也不返回任何東西。set new handler是設定乙個new handler並返回乙個new h...

C 了解new handler的所作所為

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

new handler 問題的筆記

void outofmem int main 不太懂這裡為什麼呼叫 set new handler就能儲存outofmem 感覺好奇怪,看了下vs裡面原始碼發現了 handler.cpp set new handler for microsoft include typedef int cdecl ...