C++11 move 語義

來源:互聯網
上載者:User

標籤:

首先認識3種拷貝建構函式:
1.預設的拷貝建構函式;

2.自己定義的拷貝建構函式;

3.move拷貝建構函式;

 

typedef struct MyTest{    int a;    int b;    float c;    int * d;    MyTest ():a(1),b(2),c(2.2){        d = new int[10];        for(int i = 0;i<10;i++){            d[i] = i;        }    }    ~MyTest(){        delete []d;    }}MyTest;

對於這麼個結構體

預設的建構函式,就會依次對應賦值,這樣就會出現一個問題,如果給起賦值的是一個臨時變數 MyTest t = temp,那麼,運算式結束以後,temp.d釋放掉,t.d就會成為野指標不安全。

 

然後,自訂的拷貝建構函式,就是所謂的深層拷貝,為t.d申請同樣大小的記憶體,然後依次賦值

    MyTest(MyTest& t){        a = t.a;        b = t.b;        c = t.c;        d = new int[10];        for (int i = 0;i<10;i++){            d[i] = t.d[i];        }    }

 

最後就是到了 move 構造了,首先他會辨認出,給他賦值的是一個臨時變數,他的效果咧,就是避免這樣的拷貝浪費時間,能避免賦值和記憶體申請

    MyTest(MyTest&& t){        a = t.a;        b = t.b;        c = t.c;        d = t.d;        t.d = NULL;    }

通過這樣,就竊取到臨時變數的資料,又避免了野指標和記憶體申請,資料拷貝。

 

C++11 move 語義

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.