Muduo--陳碩Muduo網路庫技術歸納&應用
阿新 • • 發佈:2021-01-26
使用智慧指標進行C++資源管理
1.使用智慧指標--shared_ptr<T> 每個shared_ptr<T>擁有一個其所管理的底層物件指標, 及該物件的引用計數. 在shared_ptr<T>物件拷貝構造/賦值時, 會對參與運算的物件的底層物件引用計數進行更新, 正確反映對其引用的shared_ptr<T>物件個數. 引用計數變為0時,底層物件被銷燬. 注意點: 1.一旦使用shared_ptr<T>作為動態分配物件的生命期管理手段, 就應在new T()外的其他所有地方, 全部使用shared_ptr<T>作為物件訪問的手段,不要使用物件原始指標. 2.在使用shared_ptr<T>調T的成員函式內部, 如有基於呼叫的shared_ptr<T>物件產生shared_ptr<T>的需求 應該: a.T公共繼承std::enable_shared_from_this<T> b.在需要基於呼叫shared_ptr<T>物件產生shared_ptr<T>處, 使用shared_from_this() shared_from_this()將返回一個shared_ptr<T>物件, 該物件和呼叫基於的shared_ptr<T> 擁有相同的底層物件及引用計數物件. 2.使用智慧指標--weak_ptr<T> 一個weak_ptr<T>只能基於一個shared_ptr<T>物件來得到. weak_ptr<T>物件擁有與基於的shared_ptr<T>物件 一樣的底層物件及引用計數物件. 但特色是 a.weak_ptr<T>本身不能訪問底層物件, 如要通過weak_ptr<T>訪問底層物件, 先通過lock成員函式,返回shared_ptr<T> 在通過返回的shared_ptr<T>進行對底層物件的訪問 b.weak_ptr<T>雖然擁有與基於的shared_ptr<T>物件 一樣的底層物件,引用計數物件. 但基於shared_ptr<T>得到weak_ptr<T>物件過程中, 不會導致引用計數物件+1. 在一些你需要記錄shared_ptr<T>擁有的底層物件,以便後續訪問. 但同時,不想因此而導致底層物件因為你的記錄,而無法銷燬的場合, weak_ptr<T>非常適合. weak_ptr<T>後續使用時,可檢查其包含的底層物件是否還有效, 有效,則訪問.無效,則不能訪問. 記錄底層物件但不干涉物件的生命期管理是weak_ptr<T>存在的意義. 3.使用智慧指標--unique_ptr<T> unique_ptr<T>存在的意義在於, unique_ptr<T>所關聯的底層物件只能被一個unique_ptr<T>物件所擁有. 不存在, shared_ptr<T>的多個shared_ptr<T>物件共享同一底層物件, 及引用計數物件因此大於1的情況.
基於std::function和std::bind的回撥
std::bind接收回調函式,允許預先設定回撥引數.
返回std::function.
std::function的返回值和std::bind繫結的函式的返回值型別一致.
std::function的引數列表由std::bind繫結的函式的引數列表中未預先設定的引數構成.