c++中,如果沒有為一個(gè)類提供析構(gòu)函數(shù),那么編譯器會為這個(gè)類提供默認(rèn)的析構(gòu)的函數(shù)。由于析構(gòu)函數(shù)的功能和構(gòu)造函數(shù)相反,因此和默認(rèn)的構(gòu)造函數(shù)類似,編譯器也會提供無用的默認(rèn)的析構(gòu)函數(shù),和非無用的析構(gòu)函數(shù)。兩者的分析情況一樣(對于默認(rèn)的構(gòu)造函數(shù)分析,請參看《從匯編看c++中默認(rèn)構(gòu)造函數(shù)的使用分析》)。并且編譯器會提供非無用的默認(rèn)析構(gòu)函數(shù)情形和默認(rèn)構(gòu)造函數(shù)類似:
1 類含有虛成員函數(shù)(類繼承自虛基類或者繼承的基類含有虛成員函數(shù),也屬于這種情況)
2 類繼承自一個(gè)基類,基類含有自定義析構(gòu)函數(shù)(如果基類沒有自定義析構(gòu)函數(shù),但是編譯器會為它提供一個(gè)非無用的默認(rèn)析構(gòu)函數(shù),也屬于這種情況。這就是說,只要基類含有一個(gè)析構(gòu)函數(shù),不管這個(gè)析構(gòu)函數(shù)是自定義的,還是編譯器提供的非無用的默認(rèn)析構(gòu)函數(shù),都行)
3 類包含一個(gè)成員對象,該成員對象自定義析構(gòu)函數(shù)(如果成員對象沒有自定義析構(gòu)函數(shù),但是編譯器會為它提供一個(gè)非無用的默認(rèn)析構(gòu)函數(shù),也屬于這種情況。這就是說,只要成員變量含有一個(gè)析構(gòu)函數(shù),不管這個(gè)析構(gòu)函數(shù)是自定義的,還是編譯器提供的非無用的默認(rèn)析構(gòu)函數(shù),都行).
并且,對于編譯器提供的默認(rèn)析構(gòu)函數(shù),不管是無用的,還是非無用的,它們都不會自動清除對象里面所包含的資源。
新聞熱點(diǎn)
疑難解答