网站建设个人简历,网站在政务新媒体建设,莆田网站建设收费标准,给个网站做导航违法吗本文由作者邹启文授权网易云社区发布。std::shared_ptr一次创建#xff0c;多处共享#xff0c;通过引用计数控制生命周期。 实例 在邮箱大师PC版中#xff0c;我们在实现搜索时#xff0c;大致思路是这样的#xff1a; 每一个账号都有一个SearchFlow#xff0c;搜索开始…本文由作者邹启文授权网易云社区发布。std::shared_ptr一次创建多处共享通过引用计数控制生命周期。 实例 在邮箱大师PC版中我们在实现搜索时大致思路是这样的 每一个账号都有一个SearchFlow搜索开始后所有SearchFlow一起并发搜索 当全部SearchFlow通过callback返回后意味着搜索结束。 方案 搜索前使用std::setint64_t accounts记录那些并发搜索的账号 当某个账号搜索完成时在callback中从accounts移除这个账号 那么当accounts为空时表示整个搜索过程结束。 问题假如搜索过程中某个账号被删除了其callback不会返回那么怎么保证搜索流程全部结束呢 std::shared_ptr在这种情况下就派出了用场而且非常巧妙。 std::shared_ptrvoid 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的生命周期从而实现一个源头分散出去最终归于一点的解决方案。更多网易技术、产品、运营经验分享请访问网易云社区。相关文章【推荐】 交互设计师如何做运营需求-以网易严选邀请新人功能设计为例【推荐】 测试环境docker化—容器集群编排实践【推荐】 致传统企业朋友不够痛就别微服务有坑 1