1. 程式人生 > 其它 >Muduo--陳碩Muduo網路庫技術歸納&應用

Muduo--陳碩Muduo網路庫技術歸納&應用

技術標籤:WorkMuduo

使用智慧指標進行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繫結的函式的引數列表中未預先設定的引數構成.

使用EPOLL替代select/poll實現IO Multiplex+多執行緒下以單執行緒模式使用EPOLL