【发布时间】:2011-08-30 19:46:59
【问题描述】:
我需要创建一个模板函数,它接收某种类型的 std::container 作为参数 - 比如说 std::vector 并从该容器中删除所有元素。我需要一个与此等效的函数:
for_each(some_vector.begin(), some_vector.end(), [](some_vector_type* element){delete element;});
调用应该是这样的:
delete_all_elements(some_vector);
这可能吗?
编辑:我想在 delete_all_elements 中使用第一个代码
【问题讨论】:
-
你在使用 C++11 并且还在写
delete?你确定你不能用std::vector<std::unique_ptr<T>>让你的问题消失吗? -
作为奖励的答案:如果你删除了一些指针,最后:要么将那些删除的指针放到
NULL(或 C++11 的nullptr),要么从容器中删除这些指针(除非您确定容器本身很快就会被销毁)。悬空指针不是一个好的设计选择... :-) ... 阅读所有答案后,我很惊讶没有人会做最后的清理工作。 -
使用
std::unique_ptr消除问题的另一个原因是,当您想要一个指向数组第一个元素的指针向量而不是单个对象时,您可以切换到@987654328 的向量@。你必须编写一个与delete_all_elements相同的delete_all_array_elements函数,除了使用delete[]而不是delete,然后在没有类型系统帮助的情况下调用正确的函数。