我正在阅读有关boost智能指针的内容,而我无法理解的一点是为什么boost :: scoped_ptr不能与STL容器一起使用?我读过它是不可复制的,但究竟是什么意思,为什么STL需要它呢?
答案 0 :(得分:3)
一些容器操作,例如std::vector
的构造函数
vector(size_type n, const T& value, const Allocator& = Allocator());
或std::vector::resize
,要求T
为CopyInsertable
。这要求向量能够调用T
的复制构造函数。因此,您无法使用此构造函数构造std::vector<boost::scoped_ptr<U>>
。
在C ++ 11之前,对T
的要求更严格。自最新标准以来,要求是针对每个容器操作而不是整个容器而定制的。因此,在很多情况下您可以使用boost::scoped_ptrs
的矢量。
答案 1 :(得分:1)
非可复制属性意味着该类具有私有的复制构造函数,因此您无法在类外部调用它。在stl容器上操作时,会复制或移动项目,因此它不能一起工作。
如果需要对stl容器使用智能指针,则应使用一个实现移动操作的方法(例如c ++ 11 unique_ptr)。