我需要创建一个模板函数,它的参数是某种类型的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中使用第一段代码。
delete
?你确定不能用std::vector<std::unique_ptr<T>>
来使问题消失吗? - Alexandre C.NULL
(或C++11的nullptr
)中,或从容器中删除这些指针(除非您确定容器本身很快就会被销毁)。拥有悬空指针不是一个好的设计选择... :-) ... 阅读所有答案,我惊讶地发现没有人会做最后的清理。 - paercebalstd::unique_ptr
消除问题的另一个原因是,当您想要一个指向数组第一个元素的指针向量时,而不是单个对象时,可以切换到std::unique_ptr<T[]>
的向量。否则,您将不得不编写一个与delete_all_elements
相同但使用delete[]
而不是delete
的delete_all_array_elements
函数,然后在没有类型系统帮助的情况下调用正确的函数。 - Steve Jessop