【发布时间】:2010-09-08 18:36:43
【问题描述】:
版本 1
类多{ 私人的: 静态 std::map以上在 MSVC 2010 上是可以的,但在 MSVC 2008 上它失败了——我猜这是因为对象在插入映射时尚未构造(我遇到了内存访问冲突)。
所以,我尝试了延迟插入,它奏效了:
第 2 版
Doh(std::string str) : stringValue_(str) { boost::thread(&Doh::insertIntoTheStaticMap,this); } 无效 insertIntoTheStaticMap() { boost::this_thread::sleep(boost::posix_time::milliseconds(1000)); Doh::someMap.insert( std::make_pair版本 1 不需要任何线程安全,因为我会在同一个线程中创建所有 Doh 实例——在初始化块中——在我进入 main() 之前,动态初始化器会调用这些实例。
但是对于版本 2,天真的 sleep() 既不优雅也不可靠(更不用说,我可能需要在插入之前锁定地图)。
什么是不错的 KISS 方法?
【问题讨论】:
-
也许您可以为版本一显示更多代码。这不应该有什么问题。地图的类型是什么?
this->stringValue_的类型是什么?你还用什么地图? -
匆忙中我删除了更多我应该删除的代码......我已经编辑了帖子。感谢您的快速周转
-
仍然缺少
map参数。
标签: visual-c++ stl constructor insert map