STL算法删除容器中的所有对象?

时间:2011-09-29 20:23:48

标签: c++ boost stl stl-algorithm boost-ptr-container

是否有STL实用程序/算法对所有对象执行delete *the_object_iterator;?这样我可以clear()安全吗? STL容器是set,对象是指向使用new创建的C ++类的指针。

Boost似乎是最好的解决方案。我的目标是避免在不可复制的类上进行复制构建。

3 个答案:

答案 0 :(得分:16)

使用智能指针来保存类指针

std::set<std::unique_ptr<MyClass> > mySet;

答案 1 :(得分:9)

据我所知,没有标准算法可以删除所有对象。但是,您可以轻松构建一个:

template< typename T > invoke_delete( T* ptr ){ delete ptr; }

std::for_each( set.begin(), set.end(), &invoke_delete< set_value_type > );

答案 2 :(得分:7)

提升指针容器是最佳选择。

它们不仅存储动态分配的对象。但是这些对象可以作为参考访问,这使得在对象上使用标准算法变得更加容易。

boost::ptr_set<MyClass>   setData;

setData.insert(new MyClass);