(=)賦值操作符
(=)賦值操作符注意事項
首先要判斷兩個運算元是否相等
返回值一定是return *this;返回型別是type&型,避免連續使用=後,出現bug
比如:
classtest
test& operator = (const test&obj)
return *this
; }
};
注意:指標物件之間賦值是不會呼叫(=)複製操作符的
編譯器預設提供的類函式
包括了:建構函式,析構函式,拷貝建構函式, (=)賦值操作符
智慧型指標
智慧型指標的由來
在以前c程式裡,使用malloc()等函式動態申請堆空間時,若不再需要的記憶體沒有被及時釋放,則會出現記憶體洩漏,若記憶體洩漏太多,則會直接導致裝置停止執行,特別是嵌入式裝置,可能有些裝置一上電就要執行好幾個月.
在c++裡,為了減少記憶體洩漏,所以便引出了智慧型指標
介紹
注意
比如ptr->value的->:
當ptr的型別是普通指標型別時,等價於:(*ptr).mem
當ptr的型別是類時,等價於:(ptr.operator->())->value 等價於: ( *(ptr.operator->()) ).value
所以->操作符函式的返回型別是type*,返回值是乙個指標變數本身(不帶*)
具體參考:
接下來個示例,指向乙個int型的智慧型指標
#include usingnamespace
std;
class
point
int* operator ->()
int& operator *()
~point()
};int
main()
return0;
}
執行列印:
0~point()
1~point()
2~point()
3~point()
4~point()
從結果可以看到,point p每被從新定義之前,便會自動呼叫析構函式來釋放之前用過的記憶體,
這樣便避免了野指標的出現。
接下來,我們繼續完善上面**,使它能夠被賦值.
#includeusing
namespace
std;
class
point
bool
isnull()
int* operator ->()
int& operator *()
point& operator = (const point&t)
return *this
; }
~point()
};int
main()
執行列印:
operator =()p=null:1
//point p的成員已被釋放
*p2=5
~point()
~point()
但是,還有個缺點,就是這個智慧型指標僅僅只能指向int型別,沒辦法指向其它型別.
接下來繼續修改,通過類模板來使這個智慧型指標能指向多種型別
#include usingnamespace
std;
template
class
point
bool
isnull()
t* operator ->()
t& operator *()
point& operator = (const point&t)
return *this
; }
~point()
}; intmain()
執行列印:
23.56
~point()
~point()
詳解C 賦值操作符 智慧型指標編寫
賦值操作符 賦值操作符注意事項 首先要判斷兩個運算元是否相等 返回值一定是return this 返回型別是type 型,避免連續使用 後,出現bug 比如 class test test operator const test obj return this 編譯器預設提供的類函式 包括了 建構函...
C 賦值操作符
定義類時,編譯器會自動幫我們定義的有四個 建構函式 析構函式 複製建構函式 賦值操作符。賦值操作符定義了該型別的物件賦值時會發生什麼。過載操作符是一些函式,其名字為operator後跟著所定義的操作符的符號。通過定義名為operator 的函式,我們可以對賦值操作符進行定義。該函式有返回值和形參表。...
C 類賦值( )操作符
如果使用者沒有編寫賦值操作符函式,編譯器就會自動為使用者建立乙個。這就是為什麼使用者可以實現p1 p2,為類賦值。語法 類名 operator const 類名 source arg 說到這裡,便想起來之前提到的副本構造器,用到副本構造器的地方其中之一是用某個物件去初始化另乙個物件。point a ...