侯捷C++ STL體系結構與原始碼剖析:關於moveable的說明
vector體積二倍增長,需要挪到另外一個空間進行構造,所以雖然insert進行300萬次,而構造的動作有700多萬次。
list一個蘿蔔一個坑,所以構造的次數和insert一樣。一個一個節點式的容器在時間花費上差不多,只有vector例外。
move的工作和淺拷貝的原理差不多。傳進去的引數是reference_by_reference。copy版本會真的分配,而move版本只是拷貝指標。
測試程式:插入300萬的元素。和測試copy,move copy(淺拷貝),swap。
注意到深拷貝copy時間為3500,而move copy和swap動作的時間幾乎為0。臨時物件就可以用move,淺拷貝的這種,因為可以保證之後不會用到。比如這裡的V1type(buf)就是臨時物件。move之後就不能用原來的東西,因為很危險。
copy深拷貝:
move copy:只是交換三個指標。
關於string:也有move copy。
相關文章
- 《STL原始碼剖析》-- 特別說明原始碼
- 關於EffectIve C++ 的總結(侯捷翻譯版)C++
- 《STL原始碼剖析》-- memory原始碼
- 【PG體系結構】PG體系結構簡單說明
- 《STL原始碼剖析》 -- stl_algo.h原始碼Go
- 《STL原始碼剖析》-- stl_algobase.h原始碼Go
- 《STL原始碼剖析》-- stl_hashtable.h原始碼
- 《STL原始碼剖析》-- stl_multimap.h原始碼
- 《STL原始碼剖析》-- stl_map.h原始碼
- 《STL原始碼剖析》-- stl_multiset.h原始碼
- 《STL原始碼剖析》-- stl_set.h原始碼
- 《STL原始碼剖析》-- stl_tree.h原始碼
- 《STL原始碼剖析》-- stl_heap.h原始碼
- 《STL原始碼剖析》-- stl_slist.h原始碼
- 《STL原始碼剖析》-- stl_queue.h原始碼
- 《STL原始碼剖析》-- stl_stack.h原始碼
- 《STL原始碼剖析》-- stl_deque.h原始碼
- 《STL原始碼剖析》-- stl_list.h原始碼
- 《STL原始碼剖析》-- stl_pair.h原始碼AI
- 《STL原始碼剖析》-- stl_vector.h原始碼
- 《STL原始碼剖析》-- stl_iterator.h原始碼
- 《STL原始碼剖析》-- stl_uninitialized.h原始碼Zed
- 《STL原始碼剖析》-- stl_alloc.h原始碼
- C++ STL 記憶體配置的設計思想與關鍵原始碼分析C++記憶體原始碼
- C++ STL記憶體配置的設計思想與關鍵原始碼分析C++記憶體原始碼
- STL原始碼剖析——vector容器原始碼
- 《STL原始碼剖析》-- stl_relops.h原始碼
- 《STL原始碼剖析》-- stl_hash_map.h原始碼
- 《STL原始碼剖析》-- stl_hash_set.h原始碼
- 《STL原始碼剖析》-- stl_construct.h原始碼Struct
- C++(STL原始碼):37---仿函式(函式物件)原始碼剖析C++原始碼函式物件
- 《STL原始碼剖析》-- stl_config.h原始碼
- 《STL原始碼剖析》-- defalloc.h原始碼
- C++動態記憶體管理與原始碼剖析C++記憶體原始碼
- 【STL 原始碼剖析】淺談 STL 迭代器與 traits 程式設計技法原始碼AI程式設計
- 《STL原始碼剖析》 -- 寫在最後原始碼
- Oracle體系結構概述與SQL解析剖析OracleSQL
- 關於OracleRac體系結構Oracle