C++ 删除容器中所有对象的STL算法?
是否有STL实用程序/算法来执行C++ 删除容器中所有对象的STL算法?,c++,boost,stl,stl-algorithm,boost-ptr-container,C++,Boost,Stl,Stl Algorithm,Boost Ptr Container,是否有STL实用程序/算法来执行delete*对象迭代器在所有对象上?这样我才能安全地清除()?STL容器是 SET/CODE >,对象是指向用新< /代码>创建的C++类的指针。 Boost似乎是最好的解决方案。我的目标是避免在不可复制的类上进行复制构造。使用智能指针来保存类指针 std::set<std::unique_ptr<MyClass> > mySet; std::set mySet; 据我所知,没有删除所有对象的标准算法。但是,您可以轻松建立一个: tem
delete*对象迭代器代码>在所有对象上?这样我才能安全地清除()?STL容器是<代码> SET/CODE >,对象是指向用<代码>新< /代码>创建的C++类的指针。
Boost似乎是最好的解决方案。我的目标是避免在不可复制的类上进行复制构造。使用智能指针来保存类指针
std::set<std::unique_ptr<MyClass> > mySet;
std::set mySet;
据我所知,没有删除所有对象的标准算法。但是,您可以轻松建立一个:
template< typename T > invoke_delete( T* ptr ){ delete ptr; }
std::for_each( set.begin(), set.end(), &invoke_delete< set_value_type > );
templateinvoke_delete(T*ptr){delete ptr;}
std::for_each(set.begin()、set.end()、&invoke_delete);
Boost指针容器是一条出路
它们不仅存储动态分配的对象。但是对象可以作为引用访问,这使得在对象上使用标准算法变得更加容易
boost::ptr_set<MyClass> setData;
setData.insert(new MyClass);
boost::ptr_设置setData;
setData.insert(新的MyClass);
考虑改用Boost.PointerContainer,请参见@Dabbler,这不是一个单行程序构建的inIt,将指针保存在容器中通常是个坏主意,因为如果容器意外损坏(例如通过异常),您将没有机会正确清理。。。。保存原始(哑)指针。拿着智能指针没关系。事实上,这是一种常见的模式。我没有注意到std中有这种模式:namespace@unixman83:unique\u ptr
在C++11中是新的。如果你的编译器中还没有它,你可以使用boost::shared_ptr
。或者std::for_each(set.begin(),set.end(),[](t*p){delete p;})
(不是模板;替换你自己)。@MSalters:的确,但这是C++11,我碰巧知道这个操作是用VC++9工作的。