繁体   English   中英

如果像这样使用 c++ std::unordered_map 会有风险吗?

[英]Does it risk if use c++ std::unordered_map like this?

如果像这样使用 c++ std::unordered_map 会有风险吗?

   std::unordered_map<std::string, std::unordered_set<std::shared_ptr<SomeType>>> _some_map;
   ...
   void init() {
       auto item = std::make_shared<SomeType>();
       _some_map["circle"].insert(item);
   }

_some_map 是一个成员变量。 init() 函数只能调用一次,因此 insert 是线程安全的。 初始化后,地图将在多线程中只读。 我认为它也是线程安全的。

我不确定我是否可以像这样使用插入。 因为当没有键“circle”的val时,它会生成一个unordered_set和一个pair。 代码正常工作。 只是想确保它没有潜在风险。

(我不擅长英文写作。)

谢谢你。

我不确定我是否可以像这样使用插入。

是的,你可以,因为operator[]

返回对映射到与 key 等效的键的值的引用,如果这样的键不存在,则执行插入。

您的value_typestd::unordered_set ,它是默认可构造的,所以没有问题。

初始化后,地图将在多线程中只读

在这里你也是安全的,因为根据容器文档

所有 const 成员函数都可以由同一容器上的不同线程并发调用。

因此,如果您只是读取值而不修改它们,那没关系。 如果您可以保证不同的线程正在访问容器中的不同元素,您甚至可以执行写操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM