暫時擱置移動語義,是標準要求使用放置新建和複製構造函數的向量重新分配和vector :: push_back?如果是這樣的話,它在標準中是這樣說的嗎?是標準要求使用放置新建和複製構造函數的向量重新分配和vector :: push_back?
回答
是的,沒有。與所有其他容器一樣,向量需要 使用allocator_traits<allocator_type>::construct
和 allocator_traits<allocator_type>::destroy
(§23.2.1/ 3)和 使用分配器(§23.2.1/ 7)獲取所有內存。如果你提供了一個自定義的分配器,你可以做任何事情。 默認分配器需要調用::operator new
(§20.6.9.1/ 6)並使用放置新的(§20.6.9.1/ 12)。
似乎這個答案沒有討論是否需要使用複製構造函數的問題? – 2013-02-18 16:51:33
@Alf好點。我忘了提到這一點。但它是否需要;如果庫複製一些東西,將使用複製構造函數。除了它是通過放置新的,如果你使用標準的分配器,並通過你提供的任何其他方式來使用。 – 2013-02-18 17:22:07
C++ 11§23.3.6.3,約
std::vector::reserve
:「如果一個異常被拋出比通過非
CopyInsertable
類型的移動構造函數其他,沒有影響。 」
這意味着,對於非CopyInsertable
項目類型緩衝重新分配,系統的實現是自由移動從舊緩衝到新項目,如果可能的話,那麼不使用類型’的拷貝構造函數。
從移動構造函數異常的影響在上面引述的一段未指定,這是在§23.3.6.5約insert
和push_back
作出了明確:「如果一個異常是由非的移動構造函數拋出 - CopyInsertable
T
,效果沒有說明。 」
使用放置新的暗示,因爲’ S中的語言’唯一功能來構造一個對象在預先存在的存儲。正如James Kanze在他的回答中指出的那樣,它也通過對分配器的要求明確要求,並且根據§23.2.1/ 2要求使用分配器’ s construct
方法。
- 1. C++:自動向量重新分配調用複製構造函數?爲什麼?
- 2. 矢量 - push_back使用默認的構造函數不復制構造函數
- 3. 爲什麼bad_alloc在新建數組,重新調整向量和push_back向量時?
- 4. vector :: push_back堅持使用複製構造函數雖然提供了移動構造函數
- 5. 在複製構造函數中複製矢量向量
- 6. 複製構造函數和動態分配
- 7. 結構上的內存分配和複製構造函數
- 8. 複製構造函數和新用的Object.create()
- 9. 向量移動構造函數比複製構造函數要慢
- 10. 放置新的和私人的構造
- 11. 放置新的和非默認的構造函數
- 12. 複製構造函數是否需要複製互斥量?
- 13. C++優化構建和複製到複製構造函數嗎?
- 14. 創建複製構造函數和重載的clone()方法
- 15. 重新調用靜態分配對象的構造函數
- 16. std :: vector如何複製其數據以進行重新分配?
- 17. 複製構造函數和內存分配
- 18. vector :: push_back <MyClass>不適用於非默認構造函數
- 19. 字符串類的構造函數和複製構造函數
- 20. 當std :: vector重新分配其內存數組時,是使用copy構造函數還是移動構造函數?
- 21. 模板函數和安置新的構造函數的參數
- 22. map <string,vector <string>>向量值的重新分配
- 23. 是否允許vector :: shrink_to_fit重新分配?
- 24. Variadic模板構造函數和複製構造函數
- 25. 向量重新分配C++
- 26. cliext ::向量和拷貝構造函數
- 27. Vector和push_back()行爲
- 28. 是從構造函數創建新
- 29. 重新分配矢量是否會導致父矢量的重新分配?
- 30. std :: vector :: assign - 重新分配數據?
[「C++ stl容器元素的CopyConstructible」要求的可能的重複](http://stackoverflow.com/questions/6532173/copyconstructible-requirement-for-c-stl-container-element) – LihO 2013-02-18 16:12:55
嗯,它不完全同樣的問題,但我認爲你會發現那裏你正在尋找的一切。 – LihO 2013-02-18 16:15:22
如果我複製,請道歉。但我的理解是,「CopyConstructible」是實現不一定實際使用的要求。 – Tyy 2013-02-18 16:20:17