关于容器释放STL

发布于 2022-09-02 02:04:19 字数 1391 浏览 9 评论 0

图片描述

图片描述

图片描述

图片描述

图片说明

  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 该如何 才能删除 谢谢解答。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

音盲 2022-09-09 02:04:19

vector里面维护的是元素的副本,这里也就是MapVec2*。当你new了一个元素塞进vector的然后遍历的时候,有两个MapVec2*的指针(Test和*itor)指向了同一个MapVec2对象,当你把*itor删除的时候,Test里保存的地址值不会受到影响,不过它指向的地方不再是一个合法的对象,因此是一个野指针。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文