簡體   English   中英

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

[英]boost::scoped_ptr and STL in C++

我正在閱讀有關boost智能指針的內容,而我無法理解的一點是為什么boost :: scoped_ptr不能與STL容器一起使用? 我讀過它是不可復制的,但究竟是什么意思,為什么STL需要它?

一些容器操作,例如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的向量。

非可復制屬性意味着該類具有私有的復制構造函數,因此您無法在類外部調用它。 在stl容器上操作時,會復制或移動項目,因此它不能一起工作。

如果需要將智能指針與stl容器一起使用,則應該使用一個實現移動操作的方法(例如c ++ 11 unique_ptr)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM