所以我得到了变量
std::map<std::string, std::shared_ptr<MyClass>> m_map;
在程序关闭例程期间,我想利用精彩的智能指针 property,这应该(如果我没有错)处理{{1实例,一旦他们自己的最后一个引用被销毁。
所以我只是打电话给MyClass
,但是这个
SOMETIME 产生上述
m_map.clear()
而在其他情况下(未知因此不受控制的变量)正常工作,
最后在其他情况下(受控变量;事实上,不同的程序配置)产生
corrupted double-linked list
我很乐意接受至少一些解决问题的方法。由于程序是强多线程的(并且我知之甚少),我想知道删除指向terminate called after throwing an instance of 'std::runtime_error*'
实例的指针是否会干扰其他内容。
答案 0 :(得分:1)
当您从至少2个不同线程调用至少2个影响结构的方法时,会导致此类错误。
例如,在std :: map上调用clear()将改变地图本身的结构(删除所有项目)。如果你有另一个线程同时使用该地图(IE。循环,插入等),那么你将会看到你所看到的例外情况。
导致异常是因为当您尝试访问std :: map结构时,std :: map结构处于无效状态(地图节点位于更改位置的中间)。
最简单的解决方案是在您访问该地图对象时保持锁定。