欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++ 移動構(gòu)造相關(guān)總結(jié)

 更新時間:2021年02月25日 16:04:42   作者:流星斬月  
這篇文章主要介紹了c++ 移動構(gòu)造的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下

 下面隨筆給出c++移動構(gòu)造。

  在現(xiàn)實中有很多這樣的例子,我們將錢從一個賬號轉(zhuǎn)移到另一個賬號,將手機SIM卡轉(zhuǎn)移到另一臺手機,將文件從一個位置剪切到另一個位置……移動構(gòu)造可以減少不必要的復(fù)制,帶來性能上的提升。

  • C++11標(biāo)準(zhǔn)中提供了一種新的構(gòu)造方法——移動構(gòu)造。
  • C++11之前,如果要將源對象的狀態(tài)轉(zhuǎn)移到目標(biāo)對象只能通過復(fù)制。在某些情況下,我們沒有必要復(fù)制對象——只需要移動它們。
  • C++11引入移動語義:

                 源對象資源的控制權(quán)全部交給目標(biāo)對象

  • 移動構(gòu)造函數(shù)

問題與解決

當(dāng)臨時對象在被復(fù)制后,就不再被利用了。我們完全可以把臨時對象的資源直接移動,這樣就避免了多余的復(fù)制操作。

移動構(gòu)造

  • 什么時候該觸發(fā)移動構(gòu)造?

                有可被利用的臨時對象

  • 移動構(gòu)造函數(shù):

     class_name ( class_name && )

//例:函數(shù)返回含有指針成員的對象(版本1)

//使用深層復(fù)制構(gòu)造函數(shù)

//返回時構(gòu)造臨時對象,動態(tài)分配將臨時對象返回到主調(diào)函數(shù),然后刪除臨時對象。

#include<iostream>

using namespace std;

class IntNum {

public:

  IntNum(int x = 0) : xptr(new int(x)){ //構(gòu)造函數(shù)

    cout << "Calling constructor..." << endl;

   }

  IntNum(const IntNum & n) : xptr(new int(*n.xptr)){//復(fù)制構(gòu)造函數(shù)

    cout << "Calling copy constructor..." << endl;

  };

  ~IntNum(){ //析構(gòu)函數(shù)

    delete xptr;

    cout << "Destructing..." << endl;

  }

  int getInt() { return *xptr; }

private:

  int *xptr;

};

//返回值為IntNum類對象

  IntNum getNum() {

    IntNum a;

    return a;

  }

int main() {

  cout<<getNum().getInt()<<endl;

  return 0;

}

//運行結(jié)果:

Calling constructor...

Calling copy constructor...

Destructing...

0

Destructing...
//例:函數(shù)返回含有指針成員的對象(版本2)

//使用移動構(gòu)造函數(shù)

//將要返回的局部對象轉(zhuǎn)移到主調(diào)函數(shù),省去了構(gòu)造和刪除臨時對象的過程。

#include<iostream>

using namespace std;

class IntNum {

public:

  IntNum(int x = 0) : xptr(new int(x)){ //構(gòu)造函數(shù)

    cout << "Calling constructor..." << endl;

  }

  IntNum(const IntNum & n) : xptr(new int(*n.xptr)){//復(fù)制構(gòu)造函數(shù)

    cout << "Calling copy constructor..." << endl;

   //注:

  //•&&是右值引用

  //•函數(shù)返回的臨時變量是右值

  }

  IntNum(IntNum && n): xptr( n.xptr){ //移動構(gòu)造函數(shù)

    n.xptr = nullptr;

    cout << "Calling move constructor..." << endl;

  }

  ~IntNum(){ //析構(gòu)函數(shù)

    delete xptr;

    cout << "Destructing..." << endl;

  }

private:

  int *xptr;

};

//返回值為IntNum類對象

  IntNum getNum() {

  IntNum a;

  return a;

}

int main() {

  cout << getNum().getInt() << endl; return 0;

}

//運行結(jié)果:

Calling constructor...

Calling move constructor...

Destructing...

0

Destructing...

以上就是c++ 移動構(gòu)造相關(guān)總結(jié)的詳細內(nèi)容,更多關(guān)于c++ 移動構(gòu)造的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 超詳細VScode調(diào)試教程tasks.json和launch.json的設(shè)置

    超詳細VScode調(diào)試教程tasks.json和launch.json的設(shè)置

    vscode是一個輕量級的文本編輯器,但是它的擴展插件可以讓他拓展成功能齊全的IDE,這其中就靠的是tasks.json和launch.json的配置,下面這篇文章主要給大家介紹了關(guān)于超詳細VScode調(diào)試教程tasks.json和launch.json設(shè)置的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 如何在C++中實現(xiàn)一個正確的時間循環(huán)器詳解

    如何在C++中實現(xiàn)一個正確的時間循環(huán)器詳解

    這篇文章主要給大家介紹了關(guān)于如何在C++中實現(xiàn)一個正確的時間循環(huán)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C語言入門篇--定義宏#define的概述

    C語言入門篇--定義宏#define的概述

    本篇文章是C語言系列基礎(chǔ)篇,適合c語言剛?cè)腴T的朋友,本文對關(guān)于c語言的定義宏#define作了簡要的概述,希望可以幫助大家快速入門c語言的世界,更好的理解c語言
    2021-08-08
  • 深入了解C語言字符函數(shù)和字符串函數(shù)

    深入了解C語言字符函數(shù)和字符串函數(shù)

    這篇文章主要給大家介紹了關(guān)于C語言字符/字符串的相關(guān)函數(shù),文中通過示例代碼總結(jié)的非常詳細,對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • C語言超詳細講解數(shù)據(jù)結(jié)構(gòu)中的線性表

    C語言超詳細講解數(shù)據(jù)結(jié)構(gòu)中的線性表

    線性表,數(shù)據(jù)結(jié)構(gòu)中最簡單的一種存儲結(jié)構(gòu),專門用于存儲邏輯關(guān)系為"一對一"的數(shù)據(jù)。線性表是基于數(shù)據(jù)在實際物理空間中的存儲狀態(tài),又可細分為順序表(順序存儲結(jié)構(gòu))和鏈表
    2022-05-05
  • C語言的多級指針你了解嗎

    C語言的多級指針你了解嗎

    這篇文章主要介紹了C語言中的多級指針,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • QT5?Thread線程的具體實現(xiàn)

    QT5?Thread線程的具體實現(xiàn)

    本文主要介紹了QT5?Thread線程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 淺談2路插入排序算法及其簡單實現(xiàn)

    淺談2路插入排序算法及其簡單實現(xiàn)

    這篇文章主要介紹了淺談2路插入排序算法及其簡單實現(xiàn),雖算不上是常用的排序方法,但在數(shù)據(jù)庫等方面依然有用上的機會,需要的朋友可以參考下
    2015-08-08
  • C++使用grpc實現(xiàn)回射服務(wù)器

    C++使用grpc實現(xiàn)回射服務(wù)器

    gRPC是由Google開發(fā)的一個開源的高性能遠程過程調(diào)用(RPC)框架,用于在分布式系統(tǒng)中實現(xiàn)跨語言的服務(wù)通信,本文我們就來看看C++如何使用grpc實現(xiàn)回射服務(wù)器
    2024-10-10
  • C語言中操作密碼文件的一些函數(shù)總結(jié)

    C語言中操作密碼文件的一些函數(shù)總結(jié)

    這篇文章主要介紹了C語言中操作密碼文件的一些函數(shù)總結(jié),包括setpwent()函數(shù)和getpwent()函數(shù)以及endpwent()函數(shù),需要的朋友可以參考下
    2015-08-08

最新評論