[英]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
,要求T
為CopyInsertable
。 這要求向量能夠調用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.