C++ Primer 5th笔记(chap 16 模板和泛型编程)效率与灵活性
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 16 模板和泛型编程)效率与灵活性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 標準庫智能指針類型 shared_ptr 和 unique_ptr
| 管理所保存的指針的策略 | 共享指針所有權 | 獨占指針 |
| 用戶重載默認刪除器的方式 | 在運行時綁定刪除器,使用戶重載刪除器更為方便 | 編譯時綁定刪除器,避免了間接調用刪除器的運行時開銷 |
1.2 shared_ptr 重載刪除器
- 在創建或 reset 指針時傳遞給它一個可調用對象。
- 在一個 shared_ptr 的生存期中, 我們可以隨時改變其刪除器的類型。
1.2.1 類成員的類型在運行時是不能改變的。因此,不能直接保存刪除器。
假定 shared_ptr 將它管理的指針保存在一個成員 p 中, 且刪除器是通過一個名為 del 的成員來訪問的。 則 shared_ptr 的析構函數必須包含類似下面這樣的語句:
// del 的值只有在運行時才知道; 通過一個指針來調用它 del ? del (p ) : delete p; // del (p> 需要運行時跳轉到 del 的地址由于刪除器是間接保存的,調用 del § 需要一次運行時的跳轉操作, 轉到 del 中保存的地址來執行對應的代碼。
1.3 unique_ ptr刪除器
刪除器的類型是一個unique_ ptr對象的類型的一部分。刪除器成員的類型在編譯時是知道的, 從而刪除器可以直接保存在 unique_ptr 對象中
用戶必須在定義unique_ ptr時以顯式模板實參的形式提供刪除器的類型,有兩個模板參數:
- 管理的指針
- 刪除器的類型
unique_ ptr的析構函數與shared_ ptr 的析構函數類似,也是對其保存的指針調用用戶提供的刪除器或執行delete:
//del在編譯時綁定;直接調用實例化的刪除器 del(p); //無運行時額外開銷del的類型或者是默認刪除器類型,或者是用戶提供的類型。到底是哪種情況沒有關系,應該執行的代碼在編譯時肯定會知道。實際上,如果刪除器是類似DebugDelete (參見16.1.4節,第595頁)之類的東西,這個調用甚至可能被編譯為內聯形式。
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)效率与灵活性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: EOS 核心功能 (2) nodeos