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仿函数进行堆对象回收。
更多精彩
赞助商链接