C/C++教程

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

本文主要是介绍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();
这篇关于C++延迟delete对象方案:采用unique_ptr托管欲删除的对象指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!