本部落格是《c++新經典》(王健偉著)的學習筆記,本人是c++初學者,如果有理解錯誤或者理解不足的地方,還請大神能夠指正。
c++搞出了std::move把左值轉成右值,還搞出移動建構函式,藉此改善效能問題,個人感覺,對我這樣的初學者帶來一定的理解難度。
我總結了一下,所謂拷貝建構函式在標準上,是深拷貝,為了改善拷貝建構函式帶來的成本開銷,c++搞出了移動建構函式,本質上就是淺拷貝,綜上,其實就是在折騰深淺拷貝而已,其實各有利弊。
1.標準的拷貝建構函式是深拷貝,有物件複製帶來的成本開銷;
2.拷貝建構函式也可以淺拷貝,但是,總有一種與標準用法不符的感覺;
3.動建構函式,實際就是對淺拷貝的封裝,確實減少了物件拷貝帶來的成本開銷,但是有個重要問題,經過移動建構函式之後,原來我們構造的a物件就不能用了,這個對效能很友好,但是,對程式邏輯的控制帶來一些不便,因為,我們一直要分析哪個物件可以用,哪個不可以用。詳細請見**注釋;
4.我覺得,很多新特性,我們也不要想那麼多,就用最原始的寫法,結合物件指標,在堆上建立物件,比較好理解。詳細請見**注釋。
#include using namespace std;
class b
C 移動建構函式和拷貝建構函式
我們用物件 a初始化物件b 後物件 a我們就不在使用 了,但是物件a的空間還在呀 在析構之前 既然拷貝建構函式,實際上就是把a物件的內容複製乙份到b中,那麼為什麼我們不能直接使用a的空間呢?這樣就避免了新的空間的分配,大大降低了 構造的成本 這就是移動建構函式設計的初衷 拷貝建構函式 中,對於指標,...
移動建構函式
移動構造 移動構造是c 11標準中提供的一種新的構造方法。在現實中有很多這樣的例子,我們將錢從乙個賬號轉移到另乙個賬號,將手機 sim卡轉移到另一台手機,將檔案從乙個位置剪下到另乙個位置 移動構造可以減少不必要的複製,帶來效能上的提公升。有些複製構造是必要的,我們確實需要另外乙個副本 而有些複製構造...
移動建構函式
c 11新引入了右值引用和移動語義兩個概念。c 包括c 中所有的表示式和變數要麼是左值,要麼是右值。通俗的左值的定義就是非臨時物件,可以在多條語句中使用的物件。右值是指臨時的物件,它們只在當前的語句有效。在c 11之前,右值是不能被引用的。如int a 1 無法從 int 轉化為 int 我們最多只...