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を使用して値への参照を保持する理由がわかりません。
値 = p->secondを削除すると、どのような影響がありますか?
誰かが私を啓発してくれますか?
これはコードhttp://bazaar.launchpad.net/~mir-team/mir/trunk/view/head:/src/frontend/resource_cache.cppです