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

uni*_*n83 3 c++ boost stl stl-algorithm boost-ptr-container

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

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

Pra*_*ian 16

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

std::set<std::unique_ptr<MyClass> > mySet;
Run Code Online (Sandbox Code Playgroud)

  • @ unixman83:`unique_ptr`是C++ 11中的新功能.如果你还没有在编译器中使用它,你可以使用`boost :: shared_ptr`. (4认同)

K-b*_*llo 9

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

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

std::for_each( set.begin(), set.end(), &invoke_delete< set_value_type > );
Run Code Online (Sandbox Code Playgroud)


Mar*_*ork 7

提升指针容器是可行的方法.

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

boost::ptr_set<MyClass>   setData;

setData.insert(new MyClass);
Run Code Online (Sandbox Code Playgroud)