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 ...