在C ++中使用boost :: scoped_ptr和STL

时间:2013-05-26 07:45:44

标签: c++ boost stl scoped-ptr

我正在阅读有关boost智能指针的内容,而我无法理解的一点是为什么boost :: scoped_ptr不能与STL容器一起使用?我读过它是不可复制的,但究竟是什么意思,为什么STL需要它呢?

2 个答案:

答案 0 :(得分:3)

一些容器操作,例如std::vector的构造函数

vector(size_type n, const T& value, const Allocator& = Allocator());

std::vector::resize,要求TCopyInsertable。这要求向量能够调用T的复制构造函数。因此,您无法使用此构造函数构造std::vector<boost::scoped_ptr<U>>

在C ++ 11之前,对T的要求更严格。自最新标准以来,要求是针对每个容器操作而不是整个容器而定制的。因此,在很多情况下您可以使用boost::scoped_ptrs的矢量。

答案 1 :(得分:1)

非可复制属性意味着该类具有私有的复制构造函数,因此您无法在类外部调用它。在stl容器上操作时,会复制或移动项目,因此它不能一起工作。

如果需要对stl容器使用智能指针,则应使用一个实现移动操作的方法(例如c ++ 11 unique_ptr)。