zoukankan      html  css  js  c++  java
  • 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++ 三大属性之多态
    C++ 编译运行过程
    优化方法
    目标检测中的IOU
    pytorch 单机多gpu运行
    WSAEventSelect网络模型
    根据数组中的索引删除对应的值
    从以下几点提高服务器并发量
    std::function
  • 原文地址:https://www.cnblogs.com/demon90s/p/15704013.html
Copyright © 2011-2022 走看看