前言
c++11提供了move語義,可以大大提高stl的效率。
一、move對stl一些容器操作效率的提高
下面幾個圖中分別對vector,deque,multiset進行拷貝構造和move構造的效率對比測試,可以看到move構造比拷貝構造快很多。
二、乙個擁有move特性的class
mystring 類中有比不同string類多了乙個move建構函式和乙個move賦值函式,有
紅色&&
符號表示move語義。
可以看到move建構函式和拷貝建構函式對比:1)引數中少了個const,因為引數物件會被改變; 2)通常情況下move構造之後,引數物件將不在使用,因為成員變數指標所指內容賦給了move物件,自身指向null ;3)比拷貝構造效率高很多,因為拷貝構造成員指標需要分配空間,move構造只要指標賦值。
move賦值函式和拷貝賦值函式對比:和建構函式對比類似。
三、move類測試
要呼叫move構造或者move賦值的時候顯示使用move語義,如下例中std:
move
(c1)。
可以看到move構造要比拷貝構造快很多,swap裡面進行的是move賦值,所以也很快,注意的是粉
紅色v1type
(buf)是臨時物件,如果物件擁有move特性,編譯器在insert的時候會把它做move賦值。
boolan c 學習筆記1
1 標頭檔案防禦式定義 2 建構函式定義注意點,引數初始化預設值,初始化列表 3 函式引數盡量傳引用 返回值返回引用需要視情況而定,如區域性變數一般不返回引用 4 變數,函式內不改變成員變數,定義成const 5 友元函式,在類中把全域性函式宣告為友元,改全域性函式可以直接訪問類成員 友元函式在類中...
boolan c 學習筆記之設計模式一
什麼是設計模式 每乙個模式描述了乙個在我們周圍不斷重 生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重複勞動 christopher alexander 軟體設計複雜的根本原因 變化客戶需求的變化 技術平台的變化 開發團隊的變化 市場環境的變化 如何解決複雜性?分解...
Boolan C 第二週學習筆記
第二週的課堂筆記,主要記錄一些以前自己不知道得東西。1.所謂的建構函式的三原則 其實預設情況下,編譯器缺省會提供拷貝構造,拷貝賦值,析構函式,它們所執行的就是預設的賦值與析構操作。並不是所有自定義的類都需要手動去寫這些函式,這次課程提供的乙個典型的情況就是類成員裡有指標時的情況,因為指標new出來的...