防止std :: set删除内存

时间:2011-05-24 16:41:26

标签: c++ memory-management set

有没有办法阻止std::set< Object*>.erase(it)函数删除内存? 我只希望从集合中删除Object*,而不释放内存..

具体来说,我有一个对象将自己从集合中移除并将自己置于另一个集合中。 它崩溃了。

set1.insert(this);    
set1.erase(set1.find(this));
set2.insert(this);

任何人都可以重现这个吗?谢谢!

4 个答案:

答案 0 :(得分:10)

由于您将原始指针存储在集合中,因此您无需执行任何特殊操作:调用erase时将不会释放内存。

关于可能导致崩溃的原因,请发布一些相关代码以及崩溃原因的详细信息。

答案 1 :(得分:2)

当您为迭代器调用erase时,set<Object*>已经不会删除指向的对象。如果它在那个区域崩溃,那是另一个原因。可能的原因是:

  • 删除项目后,您正在使用迭代器。
  • 缺少/不正确的析构函数。
  • 缺少/不正确的复制构造函数/复制赋值运算符。
  • 堆的无关问题,例如双删除。

答案 2 :(得分:1)

这已经发生了什么。

元素 - 指针 - 被销毁。 <{1}}它指向的东西也没有魔力。

答案 3 :(得分:0)

你的套装里有什么? QObject *? 如果是这样erase应该只释放你的指针而不是它指向的实例...... 你正在捡一棵树?这是你的意思吗?