effective C 讀書筆記 11 28

2022-04-13 09:06:43 字數 1336 閱讀 5306

1:

raii 資源獲得時機便是初始化時機 

典型應用: 智慧型指標!

2: 為什麼 auto_ptr 指標複製之後 原指標就會變成null  : 多分指標指向它 會被析構多次 delete 函式會多次呼叫

3:我要再次留心 stl容器的資料結構 與 特性

4: 對於heap-based 資源 用shared-ptr 比較好

但是對於 棧上資源 還是用 自己的資源管理模擬較好

5:shared_ptr 物件在引用計數 為零的時候 會delete raw ptr 

但這不是必需的

你可以用

例如:shared_ptrmutexptr(rawptr,unlock); // unlock 是個函式

這種方法自己定義引用計數為零時的動作

6:deep copying:

複製時 指標+指標指向的那塊記憶體區域 都複製

7:delete->dangle->null

8:new :

記憶體分配(operator new) 如果分配成功 則呼叫若干個建構函式

delete:

若干個析構函式被呼叫 記憶體釋放(operator delete)

9:shared_ptr 的初始化 應該以獨立語句 進行

processwidget(shared_ptr(new widget),process());

應為你無法確定 new widget 與 process() 的執行順序 萬一 process() 的執行丟擲異常  則new 出來的widget 沒有沒析構

10:11:

shared_ptr 定製 deletor  防止 跨dll的delete錯誤

它會使用初始化時所在的dll中的deletor 刪除物件

12:pass by value 不僅浪費資源 多次構造析構 

還有可能造成 slicing 

最好用 pass by reference-to-const 方式

13:references 往往 用指標 實現出來

因此 內建型別 往往 pass by value 更高效

14:任何函式返回乙個指向 local 物件的reference 都會大悲劇

15:所有local static 物件 都需要考慮其 多執行緒的安全性

16:static_cast 不能將 const 轉化為non-const 指標!

只有const_cast 可以辦到

17:盡可能利用 virtual func() 多型的方式 避免 dynamic_cast 

並且萬不得已 要使用 dynamic_cast 則要先判斷是否轉型成功

base * b = new base();

Effective C 讀書筆記1

條款1 視c 為乙個語言聯邦 今天的c 已經是個多重范型程式語言,乙個支援過程形式 物件導向形式 函式形式 泛型形式 元程式設計形式的語言。為了理解c 必須認識其主要的次語言,總共4個 1.c2.object oriented c 3.template c 4.stl 條款2 盡量以const,en...

Effective C 讀書筆記 1

1.定義式是編譯器對此物件撥發記憶體的地點。2.explicit宣告的建構函式可被用於禁止編譯器執行非預期的型別轉換。注 對於單個引數的建構函式定義了從該形參型別到該型別的乙個 轉換。explicit只對建構函式起作用,用來抑制隱式轉換。class a int function a a 當呼叫 fu...

Effective C 讀書筆記1

tmp 模板元程式設計 0.explicit建構函式比non explicit建構函式好。1.可以用const 來代替 define 定義乙個常量。define沒有作用域,也沒有封裝性。class a const int a num num的定義。在宣告式中已經獲初值,所以無需在定義式給初值。當在類...