国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

std::shared_ptr之deleter的巧妙應用

劉福 / 1207人閱讀

摘要:一次創建,多處共享,通過引用計數控制生命周期。方案搜索前,使用記錄那些并發搜索的賬號,當某個賬號搜索完成時,在中從移除這個賬號,那么,當為空時,表示整個搜索過程結束。更多網易技術產品運營經驗分享請訪問網易云社區。文章來源網易云社區

本文由作者鄒啟文授權網易云社區發布。

std::shared_ptr
一次創建,多處共享,通過引用計數控制生命周期。
實例
在郵箱大師PC版中,我們在實現搜索時,大致思路是這樣的:
每一個賬號都有一個SearchFlow,搜索開始后,所有SearchFlow一起并發搜索,
當全部SearchFlow通過callback返回后,意味著搜索結束。
方案:
搜索前,使用std::set accounts記錄那些并發搜索的賬號,
當某個賬號搜索完成時,在callback中從accounts移除這個賬號,
那么,當accounts為空時,表示整個搜索過程結束。
問題,假如搜索過程中,某個賬號被刪除了,其callback不會返回,那么,怎么保證搜索流程全部結束呢?
std::shared_ptr在這種情況下就派出了用場,而且非常巧妙。

std::shared_ptr shared_ref_count((void*)0, [](void*){        // end    });    for(int i = 0; i < 5; i++){        auto callback = base::Bind([shared_ref_count](){});        auto flow = new SearchFlow(callback);        flow->Search(key);    }

別忘了,std::shared_ptr的構造函數中提供了一個Deleter,可以讓我們自己來釋放對象,而我們就在這里執行搜索結束后的代碼。
SearchFlow在執行結束后銷毀,或者當賬號被刪除后直接銷毀,那么,保存在callback(注:callback是SearchFlow的成員變量)中的shared_ref_count也會銷毀,其引用計數-1,當所有SearchFlow都銷毀(正常或非正常)后,shared_ref_count引用計數為0,此時,Deleter就執行了。
總結
std::shared_ptr的引用計數原本是其內部為了控制生命周期使用,但是,在這里我們卻巧妙的利用引用計數來追蹤“散發出去”Flow的蹤跡,間接觀察Flow的生命周期,從而實現一個源頭分散出去,最終歸于一點的解決方案。

更多網易技術、產品、運營經驗分享請訪問網易云社區。

文章來源: 網易云社區

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25328.html

相關文章

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<