二 析構函式(C )

2021-10-09 13:19:35 字數 1320 閱讀 2320

內容參考於《21天學通c++》(第八版)

不去糾結c++的原理和細節,從c的角度去學習c++,再通過c++專案去加深理解

1. 示例1
#include

#include

using

namespace std;

class

mystring

else

buffer =

null;}

~mystring()

intgetlength()

const

char

*getstring()

};intmain()

執行結果

string buffer in sayhello is 23 characters long

buffer contains: hello from string class

invoking destructor, clearing up

main( )執行完畢時,將自動呼叫析構函式~mystring( ),輸出證明了,執行析構函式中 cout 語句的輸出。

2. 示例2-禁止在棧中例項化的類

class

monsterdb

;int

main()

上述**試圖在棧上建立例項。退棧時,將彈出棧中的所有物件,因此編譯器需要在 main( )末尾呼叫析構函式~monsterdb(),但這個析構函式是私有的,即不可用,因此上述語句將導致編譯錯誤。

可是以下**卻能編譯通過,但是純在記憶體洩漏:

int

main()

為了解決這種問題,需要在 monsterdb 類中提供乙個銷毀例項的靜態公有函式(作為類成員,它能夠呼叫析構

函式):

#include

using

namespace std;

class

monsterdb

;// private destructor prevents instances on stack

public

:static

void

destroyinstance

(monsterdb* pinstance)

void

dosomething()

// sample empty member method};

intmain()

C 析構函式 虛析構函式

1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...

C 析構函式和虛析構函式。

析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...