Effective cpp 讀書筆記10

2021-07-11 22:49:06 字數 769 閱讀 7001

set_new_handler允許客戶指定乙個函式,在記憶體分配無法獲得滿足時被呼叫

nothrow new是乙個頗為侷限的工具,因為它只適用於記憶體分配;後續的構造函式呼叫還是可能丟擲異常

namespace

std

為了檢測執行錯誤:可能存在記憶體洩漏、資料overruns(寫入點在分配區塊尾端之後)、資料underrun(寫入點在分配區塊起始之前)

為了強化效能:自帶的new和delete因為要考慮過多的問題,有可能導致內部碎片

為了收集使用上的統計資料:想自己決定分配和歸還的次序,比如fifo、最近最少使用等

為了增加分配和歸還速度:泛用型的分配器往往比定製型分配器慢

為了彌補預設分配器中的非最佳齊位:編譯器自帶的new不一定能保證

為了獲得非傳統的行為

operator new應該內含乙個無窮迴圈。並在其中嘗試分配記憶體,如果它無法滿足記憶體需求,就應該呼叫new_handler。它也應該有能力處理0 bytes申請。class專屬版本則還應該處理「比正確大小更大的(錯誤)申請」

operator delete應該在收到null指標時不做任何事。class專屬版本則還應該處理「比正確大小更大的(錯誤)申請」

當你寫乙個placement operator new,請確定也寫出對應的placement operator delete。如果沒有,你的程式可能會發生隱微而時斷時續的記憶體洩漏

當你宣告placement new和placement delete,請確定不要無意識地遮掩它們的正常版本

Effective cpp 讀書筆記1

本週內,每天更新。c 的特性主要 四個大方面 四個次語言 結論 壞處用const取代 用enum取代 用inline取代 結論 注意 const成員函式 bitwise constness 編譯器就是這種 和logical constness 在const和non const成員函式中避免重複 結論...

Effective cpp 讀書筆記2

c 默默編寫的函式 程式設計師沒有宣告的前提下 default建構函式 copy建構函式 copy assignment操作符 default析構函式 非virtual 編譯器產出的函式都是public的 關於建構函式,如果使用者定義了至少一種,就不會有預設建構函式 結論 自行宣告和定義 將對應的函...

Effective cpp 讀書筆記5

切記將成員變數宣告為private。這可賦予客戶訪問資料的一致性 可細微劃分訪問控制 允諾約束條件或的保證,並提供class作者以充分的實現彈性 protected並不比public更具封裝性 這樣做可以增加封裝性 包裹彈性和技能擴充性 目的是為了保證函式一致性。典型例子是過載類的運算子operat...