解構函式怎麼用,在c 中的,C 中的解構函式是怎麼呼叫的?

2023-02-20 21:00:35 字數 4209 閱讀 7033

1樓:網友

解構函式是一個類的例項銷燬的時候,被自動呼叫的函式,一般用來做一些清理性的工作。

2樓:貓與豬的世界

就是呼叫完類的實體物件後,需要呼叫解構函式

3樓:影視動作秀

解構函式,就是善後處理,該物件的生命週期結束了,它負責善後的一些工作,如釋放已分配的記憶體等。你將該物件delete掉時,解構函式就自動執行了,不用你去呼叫它的。

簡單的舉個例子:

假如有class test

~test()

}那麼在mian 函式中,你new 了一個 test 物件後,再將它delete 掉,這時解構函式~test();就自動執行了,釋放 a 的記憶體,並列印出"解構函式執行了"。

c++中的解構函式是怎麼呼叫的?

4樓:卞羨

形式:a

~a(){}

}~a(){}這個是解構函式

它是為了釋放建構函式a(){}所建立的記憶體。

例如你呼叫了new

就要用delete去刪除你呼叫的記憶體空間的。不然會造成記憶體洩漏,在小的程式裡看不出來,大的話就會悲劇

c++中解構函式有什麼作用?在什麼情況下用?

5樓:匿名使用者

解構函式主要作用就是釋放資源,避免記憶體洩漏如果你的類裡面只用到的基本型別,如int char double等,系統的預設解構函式其實什麼都沒有做

但如果你使用了其他的類如vector,string等,系統的預設解構函式就會呼叫這些類物件的解構函式

如果是自己寫解構函式的話,如果你的類裡面分配了系統資源,如new了記憶體空間,開啟了檔案等,那麼在你的解構函式中就必須釋放相應的記憶體空間和關閉相關的檔案;這樣系統就會自動呼叫你的解構函式釋放資源,避免記憶體洩漏

6樓:匿名使用者

若編譯程式在**中沒有找到解構函式時,會自動生成一個什麼功能都沒有的解構函式,如~a() {}。通常解構函式不是必須的,重要性上貌似比建構函式要輕的多,但當建構函式生成的例項中使用了動態記憶體時,由於預設解構函式什麼都不做,所以此時必須編寫一個解構函式,以便釋放已被使用的動態記憶體。

7樓:匿名使用者

在你的程式結束後用例項執行,呼叫該函式結束後,執行解構函式

8樓:匿名使用者

建構函式在類初始化時執行;

解構函式在類的例項執行完畢後執行.

9樓:網友

在呼叫該函式結束後,執行解構函式

請問c++中的解構函式到底有什麼作用?如何使用?

10樓:匿名使用者

個人理解:

解構函式顧名思義就是解析掉建構函式,因為一個類建立的時候你定義了一個建構函式來構造,此時系統會分配記憶體空間給這個類存放初始資料,當你用完這些資料後不在需要了,函式就會自動掉用解構函式,把分配的空間收回!

11樓:匿名使用者

樓主說得比較正確,我補充一下,不是「當你用完這些資料後不在需要了」,而是「當程式執行到這些資料的生存週期結束時」。

12樓:匿名使用者

建構函式(constructor)是一種特殊的成員函式,它提供了對成員變數進行初始化的方法,使得在宣告時能自動地初始化物件.因為當程式建立一個物件時,系統會自動呼叫該物件所屬類的建構函式.

解構函式(destructor)也是一種成員函式,但它的作用與建構函式相反,用來在系統釋放物件前做一些清理工作,如利用delete運算子釋放臨時分配的記憶體,清零某些記憶體單元等.當一個物件生存期結束時,系統會自動呼叫該物件所屬類的解構函式;

建構函式的名稱與類名相同,而解構函式的名稱必須在類名前加上"~"符號;注意,建構函式和解構函式不能指定任何返回值型別,包括void返回型別;

例如:#include

class time

; time::time(int b,int m,int a) //建構函式的實現

time::~time() //解構函式的實現

void main()

c++中解構函式的作用

13樓:安三羊舌凝然

需要解構函式的原因有很多,例如,物件可能需要收回以前分配的記憶體,或者開啟的檔案可能需要關閉。在c++中由解構函式來處理這些操作。解構函式的名稱與建構函式相同,但要在其前面加~。

14樓:營化衡巧春

主要用來進行

物件銷燬時候的善後處理工作,經常使用的有釋放動態分配的

記憶體,減少物件計數,物件銷燬通知等等

15樓:匿名使用者

如果建構函式開啟了一個檔案,最後不需要使用時檔案就要被關閉。解構函式允許類自動完成類似清理工作,不必呼叫其他成員函式。

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

16樓:業素隗凌晴

解構函式也是特殊的類成員函式,它沒有返回型別,沒有引數,不能隨意呼叫,也沒有過載,只有在類物件的生命期結束的時候,由系統自動呼叫。主要用於釋放記憶體。

解構函式與建構函式最主要大不同就是在於呼叫期不同,建構函式可以有引數可以過載!

使用new操作符建立物件(進行動態堆記憶體的開闢),如果這個類沒有解構函式,那麼在程式結束後,動態開闢的記憶體空間並沒有隨著程式的結束而釋放。

所以使用解構函式在程式結束的時候逐一清除被佔用的動態堆記憶體空間,否則就會造成記憶體洩露,使系統記憶體不斷減少系統效率將大大降低。

17樓:匿名使用者

當你用「new」操作符為變數或指標動態分配記憶體時,它們所佔用的記憶體不會隨著你的程式的關閉而關閉,這時就需要用到解構函式來把你的變數或指標銷燬,以騰出它們所佔用的記憶體空間~~~~

18樓:匿名使用者

解構函式實現與建構函式相反的功能,就是**在建構函式中所申請的記憶體空間。

19樓:淡易林孤蘭

建構函式(constructor)是一種特殊的成員函式,它提供了對成員變數進行初始化的方法,使得在宣告時能自動地初始化物件.因為當程式建立一個物件時,系統會自動呼叫該物件所屬類的建構函式.

解構函式(destructor)也是一種成員函式,但它的作用與建構函式相反,用來在系統釋放物件前做一些清理工作,如利用delete運算子釋放臨時分配的記憶體,清零某些記憶體單元等.當一個物件生存期結束時,系統會自動呼叫該物件所屬類的解構函式;

20樓:匿名使用者

一般都是**一些分配出去的記憶體,或者通知有依賴關係的物件進行某些特殊處理.

就象人死之前,要把借出去的錢都要回來,交給家人一樣,如果還是一個有名望的人,還需要依次給各位親戚通知即將死亡的訊息.

21樓:楊卓燁

解構函式的作用:就是做一些銷燬的工作

c++解構函式的使用

22樓:匿名使用者

可寫可不寫,定義函式可以裡面是空的,也就是說該函式什麼事也不做

23樓:丨花自飄零丨

預設生成的解構函式里面是空實現。

一般如果你定義的類的成員變數裡面有指標的話,就需要在解構函式里面手動加一些語句去釋放記憶體資源。(如delete free等)

24樓:匿名使用者

當然是做一些清理工作,比如記憶體釋放,資源釋放

如果這些都沒有,看具體需求了,可以是空的

在c++中,說明下列程式中是如何呼叫建構函式和解構函式的

25樓:匿名使用者

tdate1 d1;   呼叫無引數的建構函式tdate1()tdate1 d2(2000,4,2); 呼叫有引數的建構函式tdate1::tdate1(int y,int m,int d)year=y;month=m;day=d;

cout<<"constructor called\t"《在main函式即將結束時呼叫兩次解構函式 :第一次是析構d2,第二次是析構d1

tdate1::~tdate1()

cout<<"destructor called\t"《先構造的物件後析構,後構造的物件先析構。

這種問題你最好自己程式設計執行一次,比別人說的效果好很多。

c 解構函式的問題,C 關於解構函式的幾個問題

比如說,你的類裡邊有個char 你對它動態分配了記憶體,如果沒有解構函式,你是不是要在delete這個類的指標物件之前先delete這個char 的記憶體?現在有了解構函式,在解構函式中刪除char 的記憶體。這樣你之用delete一次就所有問題都搞定了,何樂而不為呢?解構函式是在這個類的生命期結束...

c 中解構函式中可以呼叫虛擬函式麼

c 中 解構函式中不可以呼叫虛擬函式。effective c 中有這樣的描述 同樣的原因也適用於析構過程。一旦派生類解構函式執行,這個物件的派生類資料成員就被視為未定義的值,所以 c 就將它們視為不再存在。c 中派生類在構造時會先呼叫基類的建構函式再呼叫派生類的建構函式,析構時則相反,先呼叫派生類的...

c中stl的vector容器的解構函式怎麼用

解構函式不需 bai要直接呼叫。而du 是在物件失效時zhi自動呼叫的。所謂物件失dao效,是指程式已經執行版出區域性變數權的作用域或者是對物件指標進行delete時。比如void foo 當此函式執行結束時,自動呼叫array的解構函式 vector c 中stl的vector容器抄的解構函式不用...