std :: shared_ptr的向量丢失数据

时间:2011-01-11 03:50:35

标签: c++ c++11 vector shared-ptr delete-operator

我正在尝试构建std::vectors的{​​{1}}和std::maps,但他们似乎有丢失数据的习惯。我的意思是,当我将std::shared_ptrs推入其中时,其中一些会删除他们指向的数据。

具体而言,删除了要推入std::shared_ptrs的第一个std::shared_ptr。这是令人困惑的,因为将std::vector推入std::shared_ptr会增加引用计数,直到原始std::vector超出范围,对吗?似乎没有其他std::shared_ptr被删除,但我无法检查,直到我解决了这个问题,因为它通过迭代检查值。

如果我没有充分解释自己,我道歉。我还在调整这个网站。

编辑:Here是两个相关类的代码。问题应该在Load成员函数中。它非常大,因为它是一个文件解析器,所以我无法分辨问题所在。 Value是一个成员变量,对于List是std::shared_ptrs,对于Compound来说是std::vector<std::shared_ptr<NBT::Tag::Base>>

2 个答案:

答案 0 :(得分:2)

你不能简单地构建shared_ptr,它们需要彼此构造,否则他们认为它们是唯一拥有的shared_ptr并在它们超出范围时删除它。如果您希望能够直接从对象构造shared_ptr,则需要从enable_shared_from_this<Type>继承。我无法轻易阅读你的代码(那里有很多代码),但是你的症状听起来像你一直在误解它们。

答案 1 :(得分:2)

通过valgrind运行您的程序,找到段错误的来源。