首页 > 关于容器释放STL

关于容器释放STL

图片描述

图片说明

  1. 创建 测试成员指针

  2. 压入容器

  3. 进行释放容器 和 容器里所指向的指针

  4. 释放容器里的指针 成功但 Test 并没有并成功释放

  5. 未点 一样没被释放

  6. 代码

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里保存的地址值不会受到影响,不过它指向的地方不再是一个合法的对象,因此是一个野指针。

【热门文章】
【热门文章】