亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

詳解C++-(=)賦值操作符、智能指針編寫

2020-05-23 13:34:37
字體:
來源:轉載
供稿:網友

(=)賦值操作符

  • 編譯器為每個類默認重載了(=)賦值操作符
  • 默認的(=)賦值操作符僅完成淺拷貝
  • 默認的賦值操作符和默認的拷貝構造函數有相同的存在意義

(=)賦值操作符注意事項

首先要判斷兩個操作數是否相等

返回值一定是 return *this; 返回類型是Type&型,避免連續使用=后,出現bug

比如:

class Test{    int *p;    Test(int i)    {       p=new int(i);    }    Test& operator = (const Test& obj)    {       if(this!=obj)       {           delete p;           p=new int(*obj.p);       }       return *this;    }};

編譯器默認提供的類函數

包括了:構造函數,析構函數,拷貝構造函數, (=)賦值操作符

智能指針

智能指針的由來

在以前C程序里,使用malloc()等函數動態申請堆空間時,若不再需要的內存沒有被及時釋放,則會出現內存泄漏,若內存泄漏太多,

則會直接導致設備停止運行,特別是嵌入式設備,可能有些設備一上電就要運行好幾個月.

C++里,為了減少內存泄漏,所以便引出了智能指針

介紹

  • 智能指針實際上是將指針封裝在一個類里,通過對象來管理指針.
  • 在構造函數時,通過對象將指針傳遞進來,指針可以是缺省值.
  • 然后構造“ -> ” “ * ” “ = ”等操作符重載,讓這個對象擁有指針的特性.
  • 最后通過析構函數,來釋放類里的指針.

注意

  • 智能指針只能指向堆空間中的對象或者變量
  • 并且一片空間最多只能由一個智能指針標識(因為多個指向地址相同的智能指針調用析構函數時,會出現bug)
  • ->和*都是一元操作符,也就是說不能帶參數

比如ptr->value的->:

當ptr的類型是普通指針類型時,等價于:(*ptr).mem

當ptr的類型是類時,等價于:(ptr.operator->())->value    等價于: ( *(ptr.operator->()) ).value

所以->操作符函數的返回類型是type*,返回值是一個指針變量本身(不帶*)

接下來個示例,指向一個int型的智能指針

#include <iostream>using namespace std;class Point{    int *p;public:    Point(int *p=NULL)    {     this->p = p;    }    int* operator -> ()    {       return p;    }    int& operator *()    {       return *p;    }    ~Point()    {     cout<<"~Point()"<<endl;     delete p;    }};int main(){        for(int i=0;i<5;i++)     {    Point p=new int(i);    cout <<*p<<endl;    }    return 0;}

運行打印:

0
~Point()
1
~Point()
2
~Point()
3
~Point()
~Point()

從結果可以看到, Point p每被從新定義之前,便會自動調用析構函數來釋放之前用過的內存,這樣便避免了野指針的出現。

接下來,我們繼續完善上面代碼,使它能夠被賦值.

#include <iostream>using namespace std;class Point{    int *p;public:    Point(int *p=NULL)    {     this->p = p;    }     bool isNULL()    {       return (p==NULL);    }    int* operator -> ()    {       return p;    }    int& operator *()    {       return *p;    }   Point& operator = (const Point& t)    {       cout<<"operator =()"<<endl;       if(this!=&t)       {           delete p;           p = t.p;           const_cast<Point&>(t).p=NULL;       }            return *this;    }    ~Point()    {     cout<<"~Point()"<<endl;     delete p;    }};int main(){        Point p=new int(2);    Point p2;    p2= p;     //等價于 p2.operator= (p);     cout <<"p=NULL:"<<p.isNULL()<<endl;    *p2+=3;    //等價于 *(p2.operator *())=*(p2.operator *())+3;              //p2.operator *()返回一個int指針,并不會調用Point類的=操作符    cout <<"*p2="<<*p2 <<endl;    return 0;}

運行打印:

operator =()      
p=NULL:1              // Point  p的成員已被釋放
*p2=5
~Point()
~Point()

但是,還有個缺點,就是這個智能指針僅僅只能指向int類型,沒辦法指向其它類型.

總結

以上所述是小編給大家介紹的C++-(=)賦值操作符、智能指針編寫,希望對大家有所幫助,如果大家有任何疑問請給我留

言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一中文字幕| 国产精品久久久久免费a∨| 97久久精品视频| 91高潮在线观看| 一区二区三区黄色| 欧美在线激情网| 国内精品久久久久久久| 668精品在线视频| 黄色成人在线免费| 少妇高潮久久久久久潘金莲| 亚洲精品720p| 色综合久久天天综线观看| 韩剧1988免费观看全集| 亚洲国产小视频在线观看| 欧美日韩成人精品| 国产成人小视频在线观看| 午夜精品一区二区三区av| 在线观看成人黄色| 日韩精品在线电影| 精品人伦一区二区三区蜜桃免费| 国产精品91久久久| 91精品免费视频| 2019国产精品自在线拍国产不卡| 神马久久桃色视频| 国产精品视频午夜| 欧美巨猛xxxx猛交黑人97人| 亚洲国产日韩欧美在线动漫| 色综合老司机第九色激情| 日韩欧美在线中文字幕| 在线观看欧美成人| 91亚洲精品在线观看| 97精品国产97久久久久久春色| 欧美另类极品videosbest最新版本| 成人激情av在线| 国产精品视频专区| 亚洲va欧美va国产综合久久| 亚洲国产天堂网精品网站| 孩xxxx性bbbb欧美| 亚洲性线免费观看视频成熟| 成人午夜小视频| 国产一区玩具在线观看| 亚洲第一二三四五区| 国产一区二区黑人欧美xxxx| 久久久免费在线观看| 精品久久在线播放| 日韩精品在线看| 亚洲欧洲在线视频| 亚洲精品天天看| 欧美一区二区三区图| 欧美视频13p| 日韩欧美a级成人黄色| 茄子视频成人在线| www.日韩视频| 欧美成人午夜激情在线| 91色视频在线观看| 国产日韩欧美日韩大片| 亚洲自拍高清视频网站| 久久精品99国产精品酒店日本| 国产成人精品亚洲精品| 欧美精品在线免费| 国产亚洲精品成人av久久ww| 亚洲国产精品va在线看黑人动漫| 日韩在线视频网站| 欧美一级片一区| 日韩亚洲一区二区| 亚洲аv电影天堂网| 日韩中文字幕在线看| 91禁外国网站| 亚洲第一页自拍| 亚洲国产精品va| 国模精品视频一区二区| 久久精品最新地址| 国产欧美最新羞羞视频在线观看| 国产福利视频一区二区| 亚洲欧美日韩精品久久奇米色影视| 日韩电影视频免费| 91免费精品视频| 日韩欧美精品中文字幕| 亚洲国产精彩中文乱码av| 国产亚洲欧美视频| 欧美理论片在线观看| 亚洲国产精品免费| 狠狠操狠狠色综合网| 国产欧美精品久久久| 亚洲激情视频网站| 亚洲成年网站在线观看| 欧美电影第一页| 久久久久久久影院| 久久精品视频va| 国产欧美日韩免费| 成人久久18免费网站图片| 欧美国产第二页| 这里只有精品视频在线| 亚洲天堂第二页| 亚洲有声小说3d| 日本免费在线精品| 丝袜一区二区三区| 日韩av片电影专区| 97在线视频免费播放| 欧美电影在线观看完整版| 中文字幕日韩有码| 欧美一区二区三区四区在线| 一二美女精品欧洲| 日韩av片永久免费网站| 日韩精品在线观看视频| 日韩久久精品成人| 午夜精品三级视频福利| 久久久久成人网| 日韩少妇与小伙激情| 亚洲一区二区三区久久| 国产精品美女999| 国产女人精品视频| 中文字幕久精品免费视频| 国产亚洲精品激情久久| 美女福利精品视频| 国产精品稀缺呦系列在线| 色阁综合伊人av| 成人美女av在线直播| 亚洲成人1234| 欧美电影免费观看电视剧大全| 精品成人69xx.xyz| 欧美电影免费在线观看| www.日韩av.com| 国产精品ⅴa在线观看h| 亚洲第一综合天堂另类专| 海角国产乱辈乱精品视频| 久久精品国产亚洲精品| 亚洲高清在线观看| 欧美亚州一区二区三区| 伊人激情综合网| 中文字幕免费国产精品| 国产主播精品在线| 欧美一区二区三区四区在线| 日韩成人中文电影| 亚洲欧美日韩国产精品| 久久精品91久久香蕉加勒比| 国产免费观看久久黄| 国产精品美女主播在线观看纯欲| 亚洲а∨天堂久久精品9966| 久久久www成人免费精品| 亚洲国产欧美在线成人app| 国产一区二区日韩| 狠狠操狠狠色综合网| 青青草99啪国产免费| 国产一区二区丝袜| 另类天堂视频在线观看| 精品成人久久av| 亚洲级视频在线观看免费1级| 午夜伦理精品一区| www.精品av.com| 欧美日韩美女在线| 亚洲亚裔videos黑人hd| 欧美国产日韩一区| 国产精品久久久久久久久免费看| 操人视频在线观看欧美| 亚洲电影第1页| 久久九九全国免费精品观看| 成人中文字幕在线观看| 日韩一区二区在线视频| 日韩大片在线观看视频| 欧美影院在线播放| 久久人人爽人人爽人人片av高请| 国产区精品视频| 欧美日韩在线视频一区二区|