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();
    
  • 相关阅读:
    node下运行ts
    npm的一些基本配置设置
    windws 安装jdk
    java jdbc连接mysql
    struts2+jquery 实现ajax登陆
    struts2 零配置
    java 生成UUID
    ubuntu 换源
    ubuntu下安装redis
    安装 vsftpd
  • 原文地址:https://www.cnblogs.com/demon90s/p/15704013.html
Copyright © 2011-2022 走看看