图片描述
图片说明
创建 测试成员指针
压入容器
进行释放容器 和 容器里所指向的指针
释放容器里的指针 成功但 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 该如何 才能删除 谢谢解答。
vector里面维护的是元素的副本,这里也就是MapVec2*。当你new了一个元素塞进vector的然后遍历的时候,有两个MapVec2*的指针(Test和*itor)指向了同一个MapVec2对象,当你把*itor删除的时候,Test里保存的地址值不会受到影响,不过它指向的地方不再是一个合法的对象,因此是一个野指针。