C 中析構函式要實現嗎?如果要實現請舉個例子

2023-02-24 23:50:05 字數 3529 閱讀 5564

1樓:匿名使用者

如果你自己不實現系統會幫你實現,不過系統實現的析構函式什麼也不做。你自己實現的目的是delete掉你new的東西。比如你有乙個類class test,析構函式就是:~test();

a就是你test類中new的物件。

2樓:藍色**

一般來說析構函式直接~t();就ok了 但是有時候建構函式申請了記憶體,那麼西溝函式中要有對應的delete

c++ 基類析構函式必須得實現嗎?

3樓:匿名使用者

必要性上看,理論上來說,虛構函式不是必須寫明的,特別是在使用視覺化編譯器的時候更是如此,因為如果沒有寫明析構函式,編譯器會在編譯的時候自動生成乙個簡單的析構函式。

但是要明確析構函式非常總要,特別是在涉及到繼承和派生的時候,如果沒有明確給出析構函式,往往會造成編譯器不報錯,程式可以執行,但是容易出現記憶體錯誤的問題。

在涉及的指標操作的時候,如果不寫明析構函式,同樣也會由於編譯自動生成的析構函式過於簡單,從而容易造成在動態分配記憶體的釋放上出現意想不到的記憶體錯誤。

後面兩種情況下的錯誤,編譯器是不會檢查的,就像編譯器永遠不會檢查記憶體溢位錯誤一樣,一旦錯誤發生,不容易找出問題。如果是大型程式,修正這類錯誤非常困難。因而從安全和穩定性而言,析構函式可以說是必須的,可以保證程式在程式設計師的設計下工作,而不會出現無法預料的錯誤。

4樓:匿名使用者

必須實現。 基類的析構函式是必須呼叫的,儘管這個基類是抽象類!

5樓:小小樂師

1,你不帶函式體,編譯器最好也會要它帶上。

2,如果不用指標,那麼這個就不算是基類了。如果是基類,那麼虛析構函式的作用就是為了正確呼叫到派生類的析構函式,以防止。

c++中析構函式可以實現什麼

6樓:小鑫

它不能帶任何引數,也沒有返回值(包括void型別)。只能有乙個析構函式,不能過載。如果使用者沒有編寫析構函式,編譯系統會自動生成乙個預設的析構函式,它也不進行任何操作。

所以許多簡單的類中沒有用顯式的析構函式。c++當中的析構函式格式如下: class 《類名》 ;類名》::

~《類名》()如以下定義是合法的: class t ; t::~t() 當程式中沒有析構函式時,系統會自動生成一下析構函式:

《類名》::類名》()即不執行任何操作。 下面通過乙個例子來說明一下析構函式的作用:

#includeusing namespace std; class t //為了簡潔,函式體可以直接寫在定義的後面。

c++中析構函式必須放在類裡面嗎

c++程式設計中析構函式的作用,請高手指點析構函式如何理解,最好能舉例說明一下,一直理解不了

7樓:匿名使用者

臨死之前必須交代後事,析構函式就是這個作用,做一些物件被刪除以前必須做的操作。比如你的建立了乙個物件,建立時候在建構函式中用new之類的方法佔用了一些記憶體空間用來儲存一些東西,那麼這個物件被刪除之前應該在析構函式中將佔用的記憶體釋放,否則記憶體就洩露了。

8樓:灬絕戀丶傾城

析構函式是特殊的類成員函式。簡單來說,析構函式與建構函式的作用正好相反,它用來完成物件被刪除前的一些清理工作,也就是專門的掃尾工作。

c++類中的析構函式重不重要啊? 建立類的時候一般需不需要建立乙個析構函式?

9樓:匿名使用者

析構函式很重要,但是一般小工程,使用預設的析構就夠了,而且哪些資源都會在程序結束時自行釋放。

說多佔用記憶體的地方,怕只是怕你new了不delete而已,只有new沒有delete才會造成記憶體浪費,其他的資源申請,一般會隨物件產生而產生物件銷毀而銷毀。

你不加析構函式,其實c++編譯器已經預設給了你乙個析構函式。所以把你自己申請的管理好就可以了。很多事情不一定非要在析構裡面做的。

析構函式使用預設的就好。自己申請的自己在合適的時候就釋放就對了。

回到主題。1.你不用刻意去寫乙個析構函式,因為編譯器會預設給你乙個(隱藏的)析構函式。

2.資源應該在合理的時候自己去釋放。new了一定要delete掉,malloc了一定要free掉。至於你放在**隨你願意,不必非要在析構裡面。

3.無論你做了多少東西,物件銷毀時,你所有浪費的資源都會銷毀,唯一影響的只是物件存在時記憶體有點佔用太多而已。物件銷毀後對其他程式沒有任何影響。

10樓:匿名使用者

所有類都有析構函式。

如果沒有定義析構函式,編譯器會自動生成乙個:

~類名()

c++中析構函式是先執行子函式還是基函式的記憶體釋放?

11樓:匿名使用者

c++中沒有基函式,子函式的說法。只有基類,繼承類的說法。基類就是父類,繼承類就是子類,繼承類繼承基類的介面和實現。

c++的類析構時,會先呼叫繼承類的析構函式,然後再呼叫基類的析構函式。

12樓:匿名使用者

沒有基函式, 子函式的說法。

只有基類和派生類的說法。 或者(父類,子類)構造過程和析構過程是相反的。

構造時, 先構造基類, 再構造派生類為什麼要這麼做呢? 舉個簡單的例子, 派生類類建構函式中呼叫了基類的乙個初函式來獲取基類成員變數的值。 如果基類還沒有構造完成的話, 獲取到的值應該是什麼呢?

所以必須要先構造基類。

析構過程剛好相反, 先析構派生類, 再析構基類。這又是為什麼呢? 同理, 如果派生類析構的時候, 要訪問基類中的乙個成員函式獲取基類成員變數值, 如果基類先析構了, 派生類呼叫得到的什麼是什麼呢?

比如指標, 肯定變成空或者野指標了。 所以必須先析構派生類。

13樓:天雨下凡

先釋放子類的記憶體,再釋放基類的記憶體。

c++öðîö¹¹º¯êý¿éòôêµïöê²ã´

c++中析構函式都得程式設計師自己編寫嗎

14樓:屋哥

不是如果你要進行特別處理,例如你要釋放自己分配的記憶體時,就要自己寫了。

如果你不寫,它會給你加乙個(你在**中看不到),這個不會自動為你釋放分配的記憶體。

15樓:匿名使用者

要看情況了,如果這個類中存在在堆記憶體中申請的動態記憶體,且希望在物件銷毀時堆記憶體也能得到釋放,則必須寫析構函式,在函式中用語句顯式釋放堆記憶體。如果不存在在堆記憶體中的動態分配,析構函式就不需要編寫。當然,如果希望在物件被銷毀時能夠自動完成一些操作的話,編寫析構函式也是很有用的。

你所說的記憶體洩露,就是指堆記憶體的洩露,如果沒有申請堆記憶體的話,當然就不會有記憶體洩露啦~

16樓:匿名使用者

不是 編譯器會自己幫你生成。

如果你是有在堆那裡申請空間 建議自己重新寫一下析構函式。

或者你想在析構函式裡面做某些操作 也可以自己重新寫一下。

什麼是c析構函式,在C 中什麼叫析構函式,怎麼用啊?舉個列啊,謝謝!!!

析構函式和建構函式正好相反.建構函式是和類同名.沒有返回值.析構函式是在類名前加 也沒有返回值.建構函式上在物件建立時執行.析構函式是在程式結束時執行.一般時候析構函式裡面寫的都是一些資源 之類的東西.不過c 的析構函式的呼叫機制和c 不同.並不能保證每次都會呼叫.所以最好不要利用c 的析構函式來 ...

c中建構函式和析構函式能不能被顯示呼叫

1 c 中,建構函式和析構函式可以被顯示呼叫.顯示呼叫預設建構函式的語法 a.a a 不能寫成a.a 顯示呼叫非預設建構函式的語法 a.a a 7 不能寫成a.a 7 顯示呼叫析構函式的語法 a.a a 可以寫成a.a 2 顯示呼叫建構函式和析構函式就像呼叫一般的函式一樣,並不意味著建立或銷毀物件 ...

c語言編寫排序函式,實現對主函式中陣列的公升序排序

include void mysort int p,int n int main int argc,char argv i mysort a,10 for i 0 i 10 printf d a i printf n return 0 void bubble sort int a,int n p2 ...