Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除容器中所有对象的STL算法?_C++_Boost_Stl_Stl Algorithm_Boost Ptr Container - Fatal编程技术网

C++ 删除容器中所有对象的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

是否有STL实用程序/算法来执行
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工作的。