從匯編看c++的默認析構函數的使用詳解
c++中,如果沒有為一個類提供析構函數,那么編譯器會為這個類提供默認的析構的函數。由于析構函數的功能和構造函數相反,因此和默認的構造函數類似,編譯器也會提供無用的默認的析構函數,和非無用的析構函數。兩者的分析情況一樣(對于默認的構造函數分析,請參看《從匯編看c++中默認構造函數的使用分析》)。并且編譯器會提供非無用的默認析構函數情形和默認構造函數類似:
1 類含有虛成員函數(類繼承自虛基類或者繼承的基類含有虛成員函數,也屬于這種情況)
2 類繼承自一個基類,基類含有自定義析構函數(如果基類沒有自定義析構函數,但是編譯器會為它提供一個非無用的默認析構函數,也屬于這種情況。這就是說,只要基類含有一個析構函數,不管這個析構函數是自定義的,還是編譯器提供的非無用的默認析構函數,都行)
3 類包含一個成員對象,該成員對象自定義析構函數(如果成員對象沒有自定義析構函數,但是編譯器會為它提供一個非無用的默認析構函數,也屬于這種情況。這就是說,只要成員變量含有一個析構函數,不管這個析構函數是自定義的,還是編譯器提供的非無用的默認析構函數,都行).
并且,對于編譯器提供的默認析構函數,不管是無用的,還是非無用的,它們都不會自動清除對象里面所包含的資源。
相關文章
深入探討Linux靜態(tài)庫與動態(tài)庫的詳解(一看就懂)
本篇文章是對Linux靜態(tài)庫與動態(tài)庫進行了詳細的分析介紹,需要的朋友參考下2013-05-05