(=)賦值操作符
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的隨縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
(=)賦值操作符注意事項(xiàng)
首先要判斷兩個(gè)操作數(shù)是否相等
返回值一定是 return *this
; 返回類型是Type&型,避免連續(xù)使用=后,出現(xiàn)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; } };
編譯器默認(rèn)提供的類函數(shù)
包括了:構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù), (=)賦值操作符
智能指針
智能指針的由來(lái)
在以前C程序里,使用malloc()等函數(shù)動(dòng)態(tài)申請(qǐng)堆空間時(shí),若不再需要的內(nèi)存沒(méi)有被及時(shí)釋放,則會(huì)出現(xiàn)內(nèi)存泄漏,若內(nèi)存泄漏太多,
則會(huì)直接導(dǎo)致設(shè)備停止運(yùn)行,特別是嵌入式設(shè)備,可能有些設(shè)備一上電就要運(yùn)行好幾個(gè)月.
在C++里,為了減少內(nèi)存泄漏,所以便引出了智能指針
介紹
注意
比如ptr->value的->:
當(dāng)ptr的類型是普通指針類型時(shí),等價(jià)于:(*ptr).mem
當(dāng)ptr的類型是類時(shí),等價(jià)于:(ptr.operator->())->value
等價(jià)于: ( *(ptr.operator->()) ).value
所以->操作符函數(shù)的返回類型是type*,返回值是一個(gè)指針變量本身(不帶*)
接下來(lái)個(gè)示例,指向一個(gè)int型的智能指針
#includeusing 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()"<
運(yùn)行打印:
0
~Point()
1
~Point()
2
~Point()
3
~Point()
~Point()
從結(jié)果可以看到, Point p每被從新定義之前,便會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)來(lái)釋放之前用過(guò)的內(nèi)存,這樣便避免了野指針的出現(xiàn)。
接下來(lái),我們繼續(xù)完善上面代碼,使它能夠被賦值.
#includeusing 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 =()"< (t).p=NULL; } return *this; } ~Point() { cout<<"~Point()"<
運(yùn)行打印:
operator =()
p=NULL:1 // Point p的成員已被釋放
*p2=5
~Point()
~Point()
但是,還有個(gè)缺點(diǎn),就是這個(gè)智能指針僅僅只能指向int類型,沒(méi)辦法指向其它類型.
總結(jié)
以上所述是小編給大家介紹的C++-(=)賦值操作符、智能指針編寫(xiě),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留
言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!