從匯編看c++的默認析構(gòu)函數(shù)的使用詳解
c++中,如果沒有為一個類提供析構(gòu)函數(shù),那么編譯器會為這個類提供默認的析構(gòu)的函數(shù)。由于析構(gòu)函數(shù)的功能和構(gòu)造函數(shù)相反,因此和默認的構(gòu)造函數(shù)類似,編譯器也會提供無用的默認的析構(gòu)函數(shù),和非無用的析構(gòu)函數(shù)。兩者的分析情況一樣(對于默認的構(gòu)造函數(shù)分析,請參看《從匯編看c++中默認構(gòu)造函數(shù)的使用分析》)。并且編譯器會提供非無用的默認析構(gòu)函數(shù)情形和默認構(gòu)造函數(shù)類似:
1 類含有虛成員函數(shù)(類繼承自虛基類或者繼承的基類含有虛成員函數(shù),也屬于這種情況)
2 類繼承自一個基類,基類含有自定義析構(gòu)函數(shù)(如果基類沒有自定義析構(gòu)函數(shù),但是編譯器會為它提供一個非無用的默認析構(gòu)函數(shù),也屬于這種情況。這就是說,只要基類含有一個析構(gòu)函數(shù),不管這個析構(gòu)函數(shù)是自定義的,還是編譯器提供的非無用的默認析構(gòu)函數(shù),都行)
3 類包含一個成員對象,該成員對象自定義析構(gòu)函數(shù)(如果成員對象沒有自定義析構(gòu)函數(shù),但是編譯器會為它提供一個非無用的默認析構(gòu)函數(shù),也屬于這種情況。這就是說,只要成員變量含有一個析構(gòu)函數(shù),不管這個析構(gòu)函數(shù)是自定義的,還是編譯器提供的非無用的默認析構(gòu)函數(shù),都行).
并且,對于編譯器提供的默認析構(gòu)函數(shù),不管是無用的,還是非無用的,它們都不會自動清除對象里面所包含的資源。
相關(guān)文章
C++學(xué)習(xí)之虛函數(shù)表與多態(tài)詳解
這篇文章主要為大家詳細介紹了C++中虛函數(shù)表與多態(tài)的相關(guān)知識,文中的示例代碼講解詳細,對我們學(xué)習(xí)C++有一定的幫助,感興趣的小伙伴可以了解一下2023-03-03詳解C++中對構(gòu)造函數(shù)和賦值運算符的復(fù)制和移動操作
這篇文章主要介紹了C++中對構(gòu)造函數(shù)和賦值運算符的復(fù)制和移動,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01深入探討Linux靜態(tài)庫與動態(tài)庫的詳解(一看就懂)
本篇文章是對Linux靜態(tài)庫與動態(tài)庫進行了詳細的分析介紹,需要的朋友參考下2013-05-05