定義:析構函式(destructor) 與建構函式相反,當物件結束其生命週期時(例如物件所在的函式已呼叫完畢),系統自動執行析構函式。析構函式往往用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,delete會自動呼叫析構函式後釋放記憶體)。
記住c++中有new,最終就要有對應的delete。
舉例:class testclass
public:
testclass();//建構函式
~testclass();//析構函式
延伸:三法則
如果乙個類需要程式設計師手動寫析構函式,那麼類一定需要拷貝建構函式和賦值操作符。
為什麼呢?原因分析:如果需要手動寫建構函式,那麼類中必然出現了指標型別的成員並在建構函式中使用new操作符分配了記憶體。因此,為了避免前面提到的淺拷貝問題,程式設計師就一定需要定義拷貝建構函式和賦值操作符。
舉例:class testclass
private:
string *m_pstring;
int m_i;
double m_d;
public:
testclass():m_pstring(new string),m_i(0),m_d(0.0) //建構函式,初始化列表,new分配記憶體
~testclass();
testclass(const testclass &other);
testclass & operator = (const testclass &other);
原始檔中:
testclass::~testclass
delete m_pstring;
testclass::testclass(const testclass &other)
m_pstring = new string;
*m_pstring = *(other.m_pstring);
m_i = other.m_i;
m_d = other.m_d;
testclass::testclass & operator = (const testclass &other)
m_pstring = new string;
*m_pstring = *(other.m_pstring);
m_i = other.m_i;
m_d = other.m_d;
return *this;
C 筆記之析構函式
析構函式是在物件銷毀時被呼叫的函式,當例項化乙個物件時占用的資源需要程式設計師手動 時,一般用來釋放資源。析構函式的定義格式 類名 析構函式沒有任何引數。檔名為student.h include include using namespace std class student include st...
c 學習筆記 析構函式
宣告 註明 出處 析構函式 在建立物件的時候系統會自動呼叫建構函式,在物件需要被銷毀的時候同樣系統會自動呼叫乙個函式 析構函式與構造函式呼叫順序是反轉過來的,先呼叫建構函式的後呼叫析構函式。include using namespace std class test test private int...
C 學習之析構函式
語法 class 類名 1 函式名一定是 類名 2 沒有返回型別,也沒有引數 3 不能被過載,即乙個類只能有乙個析構函式 當物件被銷毀時,析構函式將自動被呼叫 1 棧物件離開所在作用域時,析構函式被作用域終止的右花括號呼叫。2 堆物件的析構函式被delete操作符呼叫。注 delete物件時,會自動...