最近對準備深入學習一下c++11所有的新特性,今天研究了一下c++11的std:move和std:forward,在研究這個的時候,需要對c++0xx的拷貝構造,拷貝賦值有一些了解.這個不知道的自己去了解,這裡記錄一下c++11新加的移動版本
移動構造_移動賦值和拷貝構造_拷貝賦值的比較,文章引用
現代c++之移動構造, 移動賦值, 拷貝構造, 拷貝賦值
的這篇文章來測試.
下面**在vs2017上面可直接執行
#pragma once
#include
#include
#include
#include
class cmystring
public:
cmystring()
cmystring
(const
char
* str = nullptr)
else
}cmystring
(const cmystring& str)
cmystring
(cmystring&& str)
cmystring& operator=
(const cmystring& str)
len = str.len;
copy
(str.buf);}
return
*this;
} cmystring& operator=
(cmystring&& str)
len = str.len;
buf = str.buf;
str.len =0;
str.buf = nullptr;
}return
*this;}~
cmystring()
else
}void
print()
};void
func1
(cmystring str)
cmystring func2()
void
test0()
void
test1()
void
test2()
//測試結合容器和智慧型指標使用的情況
void
test3()
inttest_new()
C 11新特性 移動建構函式和移動賦值
移動建構函式就是從拷貝建構函式演化而來的。拷貝建構函式又分為淺拷貝和深拷貝 因此就產生了移動建構函式,將原來物件的東西移動到新的物件上 移動後當物件銷毀時不能發生錯誤 移動後原物件不再指向被移動的資源,這些資源的所有權已經歸屬新建立的物件 a a x a a x 上面兩種就是拷貝建構函式和移動建構函...
C 11 移動建構函式
移動建構函式是什麼?先舉個例子,你有一本書,你不想看,但我很想看,那麼我有哪些方法可以讓我能看這本書?有兩種做法,一種是你直接把書交給我,另一種是我去買一些稿紙來,然後照著你這本書一字一句抄到稿紙上。顯然,第二種方法很浪費時間,但這正是有些深拷貝建構函式的做法,而移動建構函式便能像第一種做法一樣省時...
移動拷貝建構函式和移動賦值
my string const char str my string my string 預設的建構函式淺拷貝 不用delete的原因是object ob ob1 一定分配好 my string const my string str 語法沒錯,可能編譯會拋 buffer new char len ...