我正在阅读Mir 项目源代码,偶然发现了这段代码:
void mir::frontend::ResourceCache::free_resource(google::protobuf::Message* key)
{
std::shared_ptr<void> value;
{
std::lock_guard<std::mutex> lock(guard);
auto const& p = resources.find(key);
if (p != resources.end())
{
value = p->second;
}
resources.erase(key);
}
}
我以前在其他项目中也看到过这一点。它在擦除之前保存对映射中值的引用,即使该块受到 lock_guard 保护。我不确定他们为什么使用std::shared_ptr value来引用该值。
如果我们删除value = p->second会有什么影响?
有人请赐教吗?
这是代码http://bazaar.launchpad.net/~mir-team/mir/trunk/view/head:/src/frontend/resource_cache.cpp