侯捷C++ STL體系結構與原始碼剖析:關於moveable的說明

weixin_39770712發表於2020-11-15

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。
在這裡插入圖片描述

相關文章