加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 从STL容器中删除元素时是否调用了析构函数?

发布时间:2020-12-16 09:28:57 所属栏目:百科 来源:网络整理
导读:假设我有两个容器存储指向同一对象的指针: std::listFoo* fooList;std::vectorFoo* fooVec; 假设我从其中一个容器中移除一个对象,如果它的方法是: std::vectorFoo*::iterator itr = std::find( fooVec.begin(),fooVec.end(),pToObj );fooVec.erase( itr );
假设我有两个容器存储指向同一对象的指针:

std::list<Foo*> fooList;
std::vector<Foo*> fooVec;

假设我从其中一个容器中移除一个对象,如果它的方法是:

std::vector<Foo*>::iterator itr = 
  std::find( fooVec.begin(),fooVec.end(),pToObj );
fooVec.erase( itr );

CppReference说这会调用对象的析构函数.这是否意味着指向fooList中对象的指针是悬空指针?

我不想使用引用计数指针.如何处理这个问题?

解决方法

没有.

从容器中删除指针时,您所做的就是从容器中获取指针值,不删除任何内容. (即:指针没有析构函数.)

但是,在容器中包含指针是危险的.考虑:

std::vector<int*> v;
v.push_back(new int());
v.push_back(new int());
v.push_back(new int());

如果你从未通过容器并删除每个容器,你就泄露了.更糟糕的是,这不是例外.您应该使用pointer container,它将删除它们在删除时指向的内容. (当容器破坏时,所有都会被删除.)

但是,在你的情况下,由于你在不同的地方共享指针,我看不到反对shared_ptr的论点;这正是它的制作方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读