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,要求TCopyInsertable。这要求向量能够调用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的主要内容,如果未能解决你的问题,请参考以下文章

scoped _ptr的模拟实现与解析

參考mudo logging写的win下logging

Boost智能指针——shared_ptr

智能指针原理及实现- unique_ptr

C++中的异常处理

C++ 舍入算法中的 0.501,C++ 中的 Excel ROUND