十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
深入淺析C++中的 new-handler機(jī)制?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
當(dāng) operator new 不能滿足一個(gè)內(nèi)存分配請(qǐng)求時(shí),它拋出一個(gè) exception(異常)。很久以前,他返回一個(gè) null pointer(空指針),而一些比較老的編譯器還在這樣做。你依然能達(dá)到以前的目的(在一定程度上),但是我要到本文的最后再討論它。
在 operator new 因回應(yīng)一個(gè)無法滿足的內(nèi)存請(qǐng)求而拋出一個(gè) exception 之前,它先調(diào)用一個(gè)可以由客戶指定的被稱為 new-handler 的 error-handling function(錯(cuò)誤處理函數(shù))。(這并不完全確切,operator new 真正做的事情比這個(gè)稍微復(fù)雜一些,詳細(xì)細(xì)節(jié)將在下一篇文章中討論。)為了指定 out-of-memory-handling function,客戶調(diào)用 set_new_handler ——一個(gè)在
namespace std { typedef void (*new_handler)(); new_handler set_new_handler(new_handler p) throw(); }