在循环遍历容器的时候,假如容器里面存的是动态对象的指针,我们就不能简单地移除掉此容器元素,还需要把此指针指向的对象 delete 掉。
但随着业务的增长,循环中我们需要对次对象执行大量的操作,这种情形下,我们往往会延迟delete掉此对象。那么有什么方案可以实现呢?
此处介绍的方案是:
除非你的业务逻辑依赖对象的析构函数,这种方法和直接delete对象不会存在本质上的差别。所执行的逻辑语义完全一致。参考如下代码:
std::set<std::unique_ptr<Obj>> delay_remove_obj_set; std::set<Obj *> obj_list; // ... for (auto it = obj_list.begin(); it != obj_list.end()) { if (...) { // erase delay_remove_obj_set.insert(*it); it = obj_list(it); } else { it->Update(); ++it; } } delay_remove_obj_set.clear();