C++ 防止std::set删除内存
有没有办法防止使用C++ 防止std::set删除内存,c++,memory-management,set,C++,Memory Management,Set,有没有办法防止使用std::set.erase(它)函数删除内存? 我只希望从集合中删除对象*,而不释放内存 具体来说,我有一个对象,它将自己从集合中移除,并将自己放到另一个集合中。 它崩溃了 set1.insert(this); set1.erase(set1.find(this)); set2.insert(this); 有人能复制这个吗?谢谢大家! 因为您在集合中存储原始指针,所以不需要做任何特殊的操作:调用erase时不会释放内存 至于可能导致崩溃的原因,请发布一些相关代码和崩
std::set
函数删除内存?
我只希望从集合中删除对象*
,而不释放内存
具体来说,我有一个对象,它将自己从集合中移除,并将自己放到另一个集合中。
它崩溃了
set1.insert(this);
set1.erase(set1.find(this));
set2.insert(this);
有人能复制这个吗?谢谢大家! 因为您在集合中存储原始指针,所以不需要做任何特殊的操作:调用
erase
时不会释放内存
至于可能导致崩溃的原因,请发布一些相关代码和崩溃具体位置的详细信息。您的集合中有什么?QObject*? 如果是这样的话,
erase
应该只释放指针,而不是它所指向的实例。。。
你在看一棵树吗?这就是你的意思吗?这已经发生了 元素-指针-被销毁。当你调用迭代器的擦除操作时,你的
集合
已经没有删除指向的对象了。如果它在那个区域坠毁,那是因为另一个原因。可能的原因有:
- 删除项目后,您将使用迭代器
- 析构函数丢失/不正确
- 缺少/不正确的复制构造函数/复制赋值运算符
- 与堆无关的问题,例如双重删除