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