关于容器释放STL
图片描述
图片说明
创建 测试成员指针
压入容器
进行释放容器 和 容器里所指向的指针
释放容器里的指针 成功但 Test 并没有并成功释放
未点 一样没被释放
代码
struct MapVec2{
MapVec2(){}
MapVec2(float _x,float _y):x(_x),y(_y){}
public:
float x;
float y;
};
Test = new MapVec2;
TestVessel.push_back(Test);
//std::vector<MapVec2*>().swap(TestVessel);
for (std::vector<MapVec2*>::iterator itor = TestVessel.begin();itor != TestVessel.end();itor++) {
if (*itor == Test) {
delete *itor;
*itor = nullptr;
}
}
std::vector<MapVec2*>().swap(TestVessel);
TestVessel.clear();
求解。 为什么Test 没有被 delete 该如何 才能删除 谢谢解答。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
vector里面维护的是元素的副本,这里也就是MapVec2*。当你new了一个元素塞进vector的然后遍历的时候,有两个MapVec2*的指针(Test和*itor)指向了同一个MapVec2对象,当你把*itor删除的时候,Test里保存的地址值不会受到影响,不过它指向的地方不再是一个合法的对象,因此是一个野指针。