最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

問(wèn)題與解決

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

移動(dòng)構(gòu)造

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

                有可被利用的臨時(shí)對(duì)象

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

     class_name ( class_name && )

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

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

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

#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類對(duì)象

  IntNum getNum() {

    IntNum a;

    return a;

  }

int main() {

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

  return 0;

}

//運(yùn)行結(jié)果:

Calling constructor...

Calling copy constructor...

Destructing...

0

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

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

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

#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ù)返回的臨時(shí)變量是右值

  }

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

    n.xptr = nullptr;

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

  }

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

    delete xptr;

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

  }

private:

  int *xptr;

};

//返回值為IntNum類對(duì)象

  IntNum getNum() {

  IntNum a;

  return a;

}

int main() {

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

}

//運(yùn)行結(jié)果:

Calling constructor...

Calling move constructor...

Destructing...

0

Destructing...

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

相關(guān)文章

  • 深入講解C++數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)函數(shù)的知識(shí)

    深入講解C++數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)函數(shù)的知識(shí)

    這篇文章主要介紹了深入講解C++數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)函數(shù)的知識(shí),包括類型轉(zhuǎn)換運(yùn)算符函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-09-09
  • C++實(shí)現(xiàn)查詢本機(jī)信息的示例代碼

    C++實(shí)現(xiàn)查詢本機(jī)信息的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)查詢本機(jī)信息,并且進(jìn)行上報(bào),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • 基于c++ ege圖形庫(kù)實(shí)現(xiàn)五子棋游戲

    基于c++ ege圖形庫(kù)實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了基于c++ ege圖形庫(kù)實(shí)現(xiàn)五子棋游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例

    利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例

    今天小編就為大家分享一篇關(guān)于利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • C++20 新特性 協(xié)程 Coroutines(2)

    C++20 新特性 協(xié)程 Coroutines(2)

    上篇文章簡(jiǎn)單給大介紹了 C++20 特性 協(xié)程 Coroutines co_yield 和 co_return 那么這篇文章繼續(xù)給大家介紹C++20 的新特性協(xié)程 Coroutines co_await,需要的朋友可以參考一下
    2021-10-10
  • C++11的函數(shù)包裝器std::function使用示例

    C++11的函數(shù)包裝器std::function使用示例

    C++11引入的std::function是最常用的函數(shù)包裝器,它可以存儲(chǔ)任何可調(diào)用對(duì)象并提供統(tǒng)一的調(diào)用接口,以下是關(guān)于函數(shù)包裝器的詳細(xì)講解,包括它的基本用法、特點(diǎn)、限制、以及與其他相關(guān)機(jī)制的對(duì)比
    2024-12-12
  • C++中默認(rèn)無(wú)參構(gòu)造函數(shù)的工作機(jī)制淺析

    C++中默認(rèn)無(wú)參構(gòu)造函數(shù)的工作機(jī)制淺析

    構(gòu)造函數(shù)主要作用在于創(chuàng)建對(duì)象時(shí)為對(duì)象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動(dòng)調(diào)用,無(wú)須手動(dòng)調(diào)用;析構(gòu)函數(shù)主要作用在于對(duì)象銷毀前系統(tǒng)自動(dòng)調(diào)用,執(zhí)行一些清理工作
    2023-02-02
  • 麻將游戲算法深入解析及實(shí)現(xiàn)代碼

    麻將游戲算法深入解析及實(shí)現(xiàn)代碼

    這篇文章主要介紹了麻將游戲算法深入解析及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++聲明extern變量和extern函數(shù)的用法

    C++聲明extern變量和extern函數(shù)的用法

    extern關(guān)鍵字可以用來(lái)聲明變量和函數(shù)作為外部變量或者外部函數(shù)供其它文件使用,所以本文給大家介紹了C++聲明extern變量和extern函數(shù)的用法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-11-11
  • c異或運(yùn)算 c異或運(yùn)算符號(hào)

    c異或運(yùn)算 c異或運(yùn)算符號(hào)

    位運(yùn)算的運(yùn)算分量只能是整型或字符型數(shù)據(jù),位運(yùn)算把運(yùn)算對(duì)象看作是由二進(jìn)位組成的位串信息,按位完成指定的運(yùn)算,得到位串信息的結(jié)果
    2014-06-06

最新評(píng)論

田阳县| 中卫市| 萝北县| 永嘉县| 湛江市| 平泉县| 拜城县| 凤山县| 岳阳市| 叙永县| 哈巴河县| 阳曲县| 贵阳市| 大丰市| 新巴尔虎左旗| 松潘县| 普安县| 彰化县| 临夏市| 江西省| 清远市| 东明县| 尼玛县| 民丰县| 芮城县| 沭阳县| 拉萨市| 阿拉善左旗| 平原县| 海安县| 哈尔滨市| 河北省| 平邑县| 黔西| 临朐县| 高要市| 邢台县| 观塘区| 连平县| 吴江市| 溆浦县|