【发布时间】:2011-06-06 22:38:15
【问题描述】:
我正在尝试构建std::shared_ptrs 的std::vectors 和std::maps,但它们似乎有丢失数据的习惯。我的意思是,当我将std::shared_ptrs 推入它们时,其中一些会删除它们指向的数据。
具体来说,第一个被推入std::vector 的std::shared_ptr 被删除。这令人困惑,因为将std::shared_ptr 推入std::vector 应该增加引用计数,直到原始std::shared_ptr 超出范围,对吗?似乎没有其他std::shared_ptrs 被删除,但我无法检查直到我解决了这个问题,因为它通过迭代检查值。
如果我没有很好地解释自己,我深表歉意。我还在适应这个网站。
编辑:Here 是两个相关类的代码。问题应该出在 Load 成员函数上。它很大,因为它是一个文件解析器,所以我不知道问题出在哪里。 Value 是一个成员变量,对于 List 是 std::vector<std::shared_ptr<NBT::Tag::Base>>,对于 Compound 是 std::map<std::string, std::shared_ptr<NBT::Tag::Base>>。
【问题讨论】:
-
你能发布一个代码示例吗?我试图模仿你用 boost::shared_ptr 描述的内容,它似乎表现正确。
-
我认为只需发布几行代码来声明您的 shared_ptr 并将其插入向量中就足够了。在为我们说明问题的同时尽量简化它——这将有助于我们为您提供帮助。
-
第 42 行缺少的毛巾运算符会导致未定义的行为,从而导致您的指针自行删除。
-
@OniLink 您是否尝试过缩小问题范围?我有一种感觉,如果您尝试仅使用 5 行代码来重现您的问题,您会很快发现错误(并且它可能与将 shared_ptrs 插入向量中无关)。
-
@OniLink 通过valgrind 运行您的程序以定位段错误的来源。
标签: c++ c++11 vector shared-ptr delete-operator