C++延迟delete对象方案:采用unique_ptr托管欲删除的对象指针
2021/12/17 22:49:52
本文主要是介绍C++延迟delete对象方案:采用unique_ptr托管欲删除的对象指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在循环遍历容器的时候,假如容器里面存的是动态对象的指针,我们就不能简单地移除掉此容器元素,还需要把此指针指向的对象 delete 掉。
但随着业务的增长,循环中我们需要对次对象执行大量的操作,这种情形下,我们往往会延迟delete掉此对象。那么有什么方案可以实现呢?
此处介绍的方案是:
- 将对象指针托管给 unique_ptr ,并存入一个set
- 将元素从容器中删除
- 循环结束后,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托管欲删除的对象指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享