发布一个stl标准库容器类(vector/list)的安全删除方法
话不多说,看代码。
#include <functional>
#ifndef ASSERT
#include <cassert>
#define ASSERT assert
#endif
/**
* 释放对象列表
* @param items 对象列表
* @return
*/
template<typename array>
void zero_array(array& items)
{
ASSERT(!items.empty());
if (!items.empty())
{
for (auto iter = items.begin(); iter != items.end();)
{
typename array::value_type& item_ptr = *iter;
destory<typename array::value_type>::delete_data(item_ptr);
iter = items.erase(iter);
}
}
}
/**
* 释放对象列表
* @param items 对象列表 deleter 删除器
* @return
*/
template<typename array>
void zero_array(array& items, std::function<void(typename array::value_type&)> deleter)
{
ASSERT(!items.empty());
if (!items.empty())
{
for (auto iter = items.begin(); iter != items.end();)
{
typename array::value_type& item_ptr = *iter;
deleter(item_ptr);
iter = items.erase(iter);
}
}
}
/**
* 删除器
*/
template<typename T>
struct destory
{ inline static void delete_data(T&) { } };
/**
* 删除器特化版本
*/
template<typename T>
struct destory <T*>
{ inline static void delete_data(T*& _ptr) { delete _ptr; _ptr = nullptr; } };
代码很简单,调用也简单,比如:
struct tag_a
{
int id;
int age;
};
vector<tag_a*> a_items;
zero_array(a_items);
或者
vector<tag_a> a_items;
zero_array(a_items);
模板内部已经做过类型自动匹配,所以不论是堆类型还是栈类型都可以安全的删除。
最新文章
- C#代码中实现两个表(DataTable)的关联查询(JOIN)
- XSS之xssprotect(转)
- 学习笔记——git
- c# CLI托管工程开启调试c++库工程代码
- linux下搭建sock5代理
- struts2的包和命名空间
- LittleTool之批量修改材质
- c# 获取某个对象的[公有属性]的名称,类型,值
- Segments POJ 3304 直线与线段是否相交
- SVN服务搭建
- 第八讲:I/O虚拟化
- [leetcode-592-Fraction Addition and Subtraction]
- java.lang.NoSuchMethodError: com.itextpdf.text.pdf.PdfDiv.setKeepTogether(Z)V
- sqlserver中批量导出所有作业或链接脚本
- 继承Thread类和实现Runnable接口
- Node.js安装和简介
- Nodejs 使用log4js日志
- Centos 装系统 配置网卡,校准时间
- Kafka API: TopicMetadata
- rem_taobaofix.js
热门文章
- POJ 1325 &;amp;&;amp; ZOJ 1364--Machine Schedule【二分图 &;amp;&;amp; 最小点覆盖数】
- Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用
- css3的新特性选择器-------属性选择器
- 51nod1004 n^n的末位数字
- c# for 和 foreach
- Excel 打开两个单独的页面
- CCNP路由实验之十五 NAT(网络地址转换)
- theme- 自定义控件属性
- [NOI.AC#40]Erlang
- [BZOJ2238]Mst 最小生成树+树链剖分/并查集