WEB开发网
开发学院软件开发C++ C++通用删除器设计 阅读

C++通用删除器设计

 2010-11-17 12:12:20 来源:WEB开发网   
核心提示:第二部分比较有意思:它是一个仿函数,它可以在一定程度上代替delete_null(first,last),C++通用删除器设计(2),以下代码展示了分别使用这两种方式回收容器中的堆对象的方法:typedefstd::vector<Text*>TextPack;TextPackuTexts1,uTexts2;

第二部分比较有意思:它是一个仿函数。它可以在一定程度上代替delete_null(first,last),以下代码展示了分别使用这两种方式回收容器中的堆对象的方法:

typedefstd::vector<Text*>TextPack;
TextPackuTexts1,uTexts2;
constintdatasize=100;
for(inti=0; i<datasize;++i)
{
uTexts1.push_back(newText);
uTexts2.push_back(newText);
}

//使用delete_null
delete_null(uTexts1.begin(),uTexts1.end());
//使用deleter
std::for_each(uTexts2.begin(),uTexts2.end(),deleter());

可以看到前者稍微简洁一些(包括最终的汇编代码),那么问题来了:为什么还需要代码量更大一些的deleter仿函数?

理由是:并不是所有存储堆对象的集合都是直接存储对象指针的。比如可以将指针存储在std::map中“值”部分,甚至有些自定义集合只提供了遍历函数(类似于std::for_each),但并不公开迭代器接口。在这些情况下,我们就可以使用deleter仿函数进行堆对象回收。

上一页  1 2 

Tags:C++ 删除器 设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接