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,它将删除它们在删除时指向的内容. (当容器破坏时,所有都会被删除.) 但是,在你的情况下,由于你在不同的地方共享指针,我看不到反对 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |