C++延迟delete对象方案:采用unique_ptr托管欲删除的对象指针

在循环遍历容器的时候,假如容器里面存的是动态对象的指针,我们就不能简单地移除掉此容器元素,还需要把此指针指向的对象 delete 掉。

但随着业务的增长,循环中我们需要对次对象执行大量的操作,这种情形下,我们往往会延迟delete掉此对象。那么有什么方案可以实现呢?

此处介绍的方案是:

  1. 将对象指针托管给 unique_ptr ,并存入一个set
  2. 将元素从容器中删除
  3. 循环结束后,clear set

除非你的业务逻辑依赖对象的析构函数,这种方法和直接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();
posted @ 2021-12-17 22:23  Demon90s  阅读(210)  评论(0编辑  收藏  举报