[手札]VC++开发(2 - STL相关)

本文探讨了VS2008中STL的线程安全性问题,明确了不同编译选项下容器和classcomplex的使用规则,并解答了关于std::map的一些常见疑惑,同时对比了Boost function与自定义delegate的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. VS 2008的STL的线程安全的吗?

VS 2008用的是PJ STL。当编译选项为/MT, /MTd, /MD, or /MDd的时候,容器和class complex的线程安全规则如下(容器包括vector, deque, list, queue, stack , priority_queue, valarray, map, multimap, set, multiset, basic_string, bitset):
只是多线程读安全;单个线程写,而没有其他线程读写,也安全;此外,线程安全针对的是对象,而和它们是不是同类型有关(猜想是极少用到static成员罢)。

总结一下,四个字,线程不安全

http://msdn.microsoft.com/ja-jp/library/c9ceah3b%28v=VS.90%29.aspx

 

2. std::map的实用疑惑

一部分人以为下面的情形,需要初始化,这个不是Java,是不需要如此的。

map<int, set<int> > m;

set<int>& s = m[1];

这里不需要判断m[1]是不是存在(有些代码会写成m[1] = set<int>();)。

 

3. delegate

有Boost的function用,就用这个。自己写的,不是功能不全,要么就是效率不高。

/Files/healerkx/delegates.rar 

我剽窃了各个方面的代码,写了一个不完全的示例;还没有完,但是此处就是很多问题的分界线了。怎么选择呢?

 

转载于:https://www.cnblogs.com/healerkx/articles/1833144.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值