如果vector中的元素被外部delete 会发生什么?
测试代码如下
#include <iostream>
#include <vector>
class A
{
public:
std::string name = "";
int id;
A(std::string name, int id)
{
this->name = name;
this->id = id;
}
};
int main(int argc, char** argv)
{
std::vector<A*> vec;
A* a1 = new A("a1", 1);
A* a2 = new A("a2", 2);
A* a3 = new A("a3", 3);
vec.emplace_back(a1);
vec.emplace_back(a2);
vec.emplace_back(a3);
delete a1;
// std::erase_if(vec, [](A* a) { return a->id == 1; });
std::cout << vec.size() << std::endl;
for (const auto value : vec)
{
std::cout << value->name << std::endl;
}
}
输出结果为
3
如果delete a2呢?结果就是
3
a1
delete a3以此类推
那么如果想要删除vector中的元素,建议使用erase_if
例如在我这个例子里面
std::erase_if(vec, [](A* a) { return a->id == 1; });
就可以把id为1的元素,也就是a1删除掉,输出结果为
2
a2
a3
符合我的预期,我使用c++20标准,不保证其他标准也能使用