C 11新特性 移動建構函式和移動賦值

2021-10-18 08:14:41 字數 1365 閱讀 8906

移動建構函式就是從拷貝建構函式演化而來的。

拷貝建構函式又分為淺拷貝和深拷貝:

因此就產生了移動建構函式,

將原來物件的東西移動到新的物件上

移動後當物件銷毀時不能發生錯誤

移動後原物件不再指向被移動的資源,這些資源的所有權已經歸屬新建立的物件

a(a&x)

a(a&&x)

上面兩種就是拷貝建構函式和移動建構函式的對比。

拷貝建構函式時,因為類中的資料是指標型別所以在賦值的時候需要重新在堆上建立乙個空間,在賦值。而不能直接進行賦值

而移動建構函式的目的就是將原物件的東西移動到新物件上面,所以直接賦值就行,但是需要將原物件的指向變為空。

**如下:

#includeusing namespace std;

class a

a(a&x)

a(a&&x)

~a()

int *num;

};void test()

int main()

執行結果:

從這個引出了移動賦值函式:這個和上面的類似

也是將原物件的東西賦值給新物件,然後原物件指向空

void operator = (a && x)

void operator = (a & x)

跟上面的方法類似,呼叫方法:

a b;

b = a;  //使用operator=

a c;

c = move(a); //使用移動賦值函式

**:

#includeusing namespace std;

class a

void operator = (a && x)

void operator = (a & x)

~a()

int *num;

};void test()

int main()

執行結果:

C 11新特性學習筆記之移動建構函式

一般來說,如果乙個類中有指標成員,則要小心拷貝成員函式的編寫,因為如果不注意,則會造成程式的記憶體洩漏。如下所示的例子。include class hasptrmem hasptrmem int m data int main 我們申明了乙個帶有指標成員的hasptrmem類,在main函式中宣告了...

C 11 移動建構函式

移動建構函式是什麼?先舉個例子,你有一本書,你不想看,但我很想看,那麼我有哪些方法可以讓我能看這本書?有兩種做法,一種是你直接把書交給我,另一種是我去買一些稿紙來,然後照著你這本書一字一句抄到稿紙上。顯然,第二種方法很浪費時間,但這正是有些深拷貝建構函式的做法,而移動建構函式便能像第一種做法一樣省時...

c 11 移動構造 移動賦值 拷貝構造

最近對準備深入學習一下c 11所有的新特性,今天研究了一下c 11的std move和std forward,在研究這個的時候,需要對c 0xx的拷貝構造,拷貝賦值有一些了解.這個不知道的自己去了解,這裡記錄一下c 11新加的移動版本 移動構造 移動賦值和拷貝構造 拷貝賦值的比較,文章引用 現代c ...