【发布时间】:2015-06-23 11:46:02
【问题描述】:
所以我得到了变量
std::map<std::string, std::shared_ptr<MyClass>> m_map;
在程序关闭例程期间,我想利用奇妙的智能指针 property(如果我没记错的话)负责销毁 MyClass 实例,一旦他们自己的最后一个引用被销毁。
所以我只是打电话给m_map.clear(),但是这个
-
SOMETIME 产生上述的
corrupted double-linked list 而在其他情况下(未知因此不受控制的变量)工作正常,
-
最后在其他情况下(受控变量;事实上,不同的程序配置)产生
terminate called after throwing an instance of 'std::runtime_error*'
我很乐意至少收到一些有关解决问题的方法的提示。由于该程序是强多线程的(而且我对此知之甚少),我想知道删除指向 MyClass 实例的指针是否会干扰其他事情。
【问题讨论】:
-
您是否尝试过使用 valgrind 或 gdb 来分析您的代码?
-
如果没有看到您的“有时”、“其他情况”和“其他情况”,我们无法知道问题出在哪里。
-
您不应该将新的智能指针视为自动删除指针,而是从所有权的角度来看。资源一次可以只有一个所有者吗?然后使用
std::unique_ptr。一个资源可以同时拥有多个所有者吗?然后使用std::shared_ptr。 -
一个基本但重要的问题:正如您所写,它是多线程的;所以你在做同步,对吧?
标签: c++ multithreading stdmap