C 學習筆記之析構函式(三法則)

2022-04-29 14:00:09 字數 1193 閱讀 8082

定義:析構函式(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物件時,會自動...