關於set new handler的理解

2021-08-21 04:18:41 字數 890 閱讀 4020

原文出處:

在閱讀侯傑的《stl原始碼剖析》的時候,在書中的p45頁遇到一段**,書中並沒有給予詳細的解釋,查閱資料發現網上的解釋並不是那麼盡如人意,在查閱了《effective c++》這本書之後,總結寫出了這篇部落格。書中的「問題**」:

template

inline t* _allocate(ptrdiff_t size,t*)

return tmp;

}

我們知道當operator new無法滿足某乙個記憶體分配的需求的時候,它會丟擲乙個異常,在這之前,它會先呼叫乙個客戶制定的錯誤處理函式new_handler。為了指定這個來處理記憶體不足的函式,使用者需要呼叫標準庫程式函式set_new_handler:

namespace

std;//乙個函式指標

new_handler set_new_handler(new_handler p) throw();

};

從源**中,我們可以看出set_new_handler實際上就是乙個形參和返回值型別都是new_handler的函式。

前面我們提到,當operator new無法分配足夠的記憶體時,set_new_handler函式會被呼叫。那麼這一過程具體是怎麼發生的呢?我們還是通過乙個例子來理解:

void outofmem()

int main()

在本程式中,如果不能為operator new分配所需要的100000000個整數的空間,outofmem就會被呼叫,於是程式終止(abort)。如果一直不能滿足的話,outofmem也就是之前所說的new_handler函式會不斷被呼叫。

這下你對set_new_handler的使用和發揮作用的機制更了解了吧。

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...