日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

Effective C++ --8 定制new和delete 9杂谈讨论

發(fā)布時(shí)間:2025/3/21 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Effective C++ --8 定制new和delete 9杂谈讨论 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇Effective C++ --7 模板與泛型編程

?

Effective C++ --8 定制newdelete

49、了解new-handler的行為

?1set_new_handler允許客戶指定一個(gè)函數(shù),在內(nèi)存分配無(wú)法獲得滿足時(shí)被滿足。Operate new 確保在分配class對(duì)象內(nèi)存的過(guò)程中以class專屬之new_handler替換global new-handler

?2Nothrow new是一個(gè)頗為局限的工具,因?yàn)樗贿m用于內(nèi)存分配,后續(xù)的構(gòu)造函數(shù)調(diào)用還是可能拋出異常。

50、了解newdelete的合理替換時(shí)機(jī)

?1)替換編譯器所提供的operator newoperator delete的理由:用來(lái)檢測(cè)運(yùn)用上的錯(cuò)誤、為了強(qiáng)化效能、為了收集使用上的統(tǒng)計(jì)數(shù)據(jù)。

51、編寫newdelete時(shí)需固守常規(guī)

?1operator new應(yīng)該內(nèi)含一個(gè)無(wú)窮循環(huán),并在其中嘗試分配內(nèi)存,如果它無(wú)法滿足內(nèi)存需求,就該調(diào)用new_handler。它也應(yīng)該有能力處理0bytes申請(qǐng),通常將0byte申請(qǐng)視為1byteClass專屬版本則還應(yīng)該處理“比正確大小更大的(錯(cuò)誤)申請(qǐng)”。

?2operator delete應(yīng)該在收到null指針時(shí)不做任何事情。Class專屬版本則還應(yīng)該處理“比正確大小更大的(錯(cuò)誤)申請(qǐng)”。

52、寫了placement new也要寫placement delete

?1placement new是指非正常形式附帶參數(shù)的operator newoperator new接受的參數(shù)除了一定會(huì)有的那個(gè)size_t之外還有別的參數(shù)。正常的operator new函數(shù)為 void* operator new(std::size_t)throw(std::bad_alloc);

?2)當(dāng)寫了一個(gè)placement operator new時(shí),要確定也寫出了對(duì)應(yīng)的placement delete。如果沒有那么做,程序可能會(huì)發(fā)生隱微而時(shí)斷時(shí)續(xù)的內(nèi)存泄露。如果沒有聲明對(duì)應(yīng)的placement operator delete,運(yùn)行期系統(tǒng)不知道如何取消并恢復(fù)原先對(duì)placement new的調(diào)用,這樣就會(huì)造成內(nèi)存泄露。Placement delete只有在伴隨placement new調(diào)用而觸發(fā)的構(gòu)造函數(shù)出現(xiàn)異常時(shí)才會(huì)被調(diào)用,平時(shí)不會(huì)調(diào)用。

?3)當(dāng)聲明placement new placement delete時(shí),確定不要無(wú)意識(shí)地遮掩了正常版本。如果在class內(nèi)聲明任何operator new,就會(huì)遮掩所有operator newplacement newnothrow new

Effective C++ --9雜談?dòng)懻?/span>

53、不要輕忽編譯器的警告

?1)嚴(yán)肅對(duì)待編譯器發(fā)出的警告信息。努力在編譯器最高警告級(jí)別下爭(zhēng)取“無(wú)任何警告”的榮譽(yù)。

?2)不要過(guò)度依賴編譯器的報(bào)警能力,因?yàn)椴煌木幾g器對(duì)待事物的態(tài)度并不相同。一旦移植到另一個(gè)編譯器上,原本依賴的警告信息有可能消失。

54、讓自己熟悉包括TR1在內(nèi)的標(biāo)準(zhǔn)程序庫(kù)

?1C++標(biāo)準(zhǔn)程序庫(kù)的主要機(jī)能由STLiostreamslocalesmultiple active locales,多區(qū)域)組成。并包含C99標(biāo)準(zhǔn)庫(kù)。

?2TR1添加了智能指針(tr1::shared_ptr)、一般化函數(shù)指針(tr1::function)、hash-based容器、正則表達(dá)式(regular expression)以及另外10個(gè)組件的支持。

?3TR1自身只是一份規(guī)范,為獲得TR1提供的好處,需要一份實(shí)物。一個(gè)好的實(shí)物來(lái)源是Boost

55、讓自己熟悉Boost

1Boost在標(biāo)準(zhǔn)化過(guò)程中扮演深具影響力的角色,提供許多TR1組件實(shí)現(xiàn)品,以及許多程序庫(kù)。

總結(jié)

以上是生活随笔為你收集整理的Effective C++ --8 定制new和delete 9杂谈讨论的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。