C++ 中的 boost::scoped_ptr 和 STL
Posted
技术标签:
【中文标题】C++ 中的 boost::scoped_ptr 和 STL【英文标题】:boost::scoped_ptr and STL in C++ 【发布时间】:2013-05-26 07:45:43 【问题描述】:我正在阅读有关 boost 智能指针的信息,但我无法理解的一件事是为什么 boost::scoped_ptr 不能与 STL 容器一起使用?我读过它是不可复制的,但这究竟是什么意思,为什么 STL 需要它?
【问题讨论】:
【参考方案1】:一些容器操作,比如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
的向量。
【讨论】:
【参考方案2】:不可复制属性意味着类具有私有的复制构造函数,因此您不能在类之外调用它。在 stl 容器上操作时,项目被复制或移动,因此它不会一起工作。
如果您需要在 stl 容器中使用智能指针,您应该使用一个实现移动操作的智能指针(例如 c++11 unique_ptr)。
【讨论】:
以上是关于C++ 中的 boost::scoped_ptr 和 STL的主要内容,如果未能解决你的问题,请参考以下文章