有没有办法阻止std::set< Object*>.erase(it)
函数删除内存?
我只希望从集合中删除Object*
,而不释放内存..
具体来说,我有一个对象将自己从集合中移除并将自己置于另一个集合中。 它崩溃了。
set1.insert(this);
set1.erase(set1.find(this));
set2.insert(this);
任何人都可以重现这个吗?谢谢!
答案 0 :(得分:10)
由于您将原始指针存储在集合中,因此您无需执行任何特殊操作:调用erase
时将不会释放内存。
关于可能导致崩溃的原因,请发布一些相关代码以及崩溃原因的详细信息。
答案 1 :(得分:2)
当您为迭代器调用erase时,set<Object*>
已经不会删除指向的对象。如果它在那个区域崩溃,那是另一个原因。可能的原因是:
答案 2 :(得分:1)
这已经发生了什么。
元素 - 指针 - 被销毁。 <{1}}它指向的东西也没有魔力。
答案 3 :(得分:0)
你的套装里有什么? QObject *?
如果是这样erase
应该只释放你的指针而不是它指向的实例......
你正在捡一棵树?这是你的意思吗?