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的定義。在宣告式中已經獲初值,所以無需在定義式給初值。當在類...