1

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

4

2 回答 2

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

于 2013-05-26T07:58:59.247 回答
1

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

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

于 2013-05-26T07:54:27.353 回答