本文由作者邹启文授权网易云社区发布。
std::shared_ptr
一次创建,多处共享,通过引用计数控制生命周期。
实例 在邮箱大师PC版中,我们在实现搜索时,大致思路是这样的: 每一个账号都有一个SearchFlow,搜索开始后,所有SearchFlow一起并发搜索, 当全部SearchFlow通过callback返回后,意味着搜索结束。 方案: 搜索前,使用std::set<int64_t> accounts记录那些并发搜索的账号, 当某个账号搜索完成时,在callback中从accounts移除这个账号, 那么,当accounts为空时,表示整个搜索过程结束。 问题,假如搜索过程中,某个账号被删除了,其callback不会返回,那么,怎么保证搜索流程全部结束呢? std::shared_ptr在这种情况下就派出了用场,而且非常巧妙。std::shared_ptrshared_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
,可以让我们自己来释放对象,而我们就在这里执行搜索结束后的代码。
更多网易技术、产品、运营经验分享请访问。
相关文章:
【推荐】 【推荐】 【推荐】