c 析構函式何時會被呼叫,C 析構函式何時會被呼叫?

2021-09-04 02:34:03 字數 2873 閱讀 4827

1樓:匿名使用者

析構函式(destructor) 與建構函式相反,當物件脫離其作用域時(例如物件所在的函式已呼叫完畢),系統自動執行析構函式。析構函式往往用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在析構函式中用delete釋放)。

2樓:千鋒教育

c++中的每個類都會有乙個析構函式,當這個類的物件被銷毀的時候,物件會自動呼叫析構函式。

跟據物件的宣告方式分兩種情況來講:

1、動態宣告的物件

這種宣告方式下系統會自動銷毀不再使用的物件,對應的物件的析構函式也會被呼叫。例如classname object;這樣宣告的物件,當程式執行到了物件作用域之外或者程式退出,物件都會被銷毀,當然析構函式也會被呼叫。

2、靜態宣告的物件(new等)

這種宣告方式下系統不會主動銷毀物件,對應的析構函式也不會被主動呼叫,除非程式顯式地呼叫delete等函式。這種情況下只要不去delete,物件的析構函式永遠不會呼叫,即便這個物件的記憶體空間已經洩露或者程式退出。

3樓:匿名使用者

析構函式執行時機:1.當程式棧內物件被刪除時2.手動呼叫析構函式時

要更詳細的理解機制,請嘗試:

#include

using namespace std;

class temp

~temp()

temp(temp &a)

int main()

程式執行結果因編譯器而異,可能的結果如下:

an object temp build. // aan object temp build. // bcopy from an object!method 2! // b=a

copy from an object!method 1! // c(a)

an object temp build. // dan object temp build. // tempcopy from an object!

method 2! // d=temp

an object temp delete. // tempan object temp delete. // dan object temp delete.

// can object temp delete. // ban object temp delete. // a

c++中,析構函式在什麼時候才會被呼叫?

4樓:匿名使用者

在該類生成的物件例項宣告週期結束時,才被呼叫析構函式,在定義類時,進行宣告、定義,主要用來釋放申請的資源,如定義了指標變數,並對其進行空間分配( new xx ),就可以在析構函式中

釋放資源。舉例入下

class a

~a()

}}// end of class a

5樓:匿名使用者

析構函式是在物件銷毀的時候被系統呼叫的。

另外,你這裡說反了,如果去掉foo裡面去掉&,就會多生成乙個臨時變數,foo結束後,這個物件會被析構,這時候就會多輸入乙個destructor。如果是原來的a foo(a& anobj)這裡的引數是引用,則不會建立乙個物件,也就沒有所謂析構。所以引用不會多乙個destructor

其實main裡面裡面也有定義兩個a物件,在退出main的時候,也會被呼叫的,你在命令列裡執行程式可以看到,程式結束後會有兩個destructor輸出:

default constructor calledinside foo

copy constructor calleddestructor called // main函式裡的a析構destructor called // main函式裡的a析構press any key to continue這是我在vc中執行的結果。

6樓:0無_心

因為析構的時候你已經退出了。。。自然就顯示不出來了。。。一般在new之後用delete可以看到結果

c++中的建構函式和析構函式是什麼時候被呼叫的?

7樓:匿名使用者

建構函式:只在建立物件的時候才會呼叫,其他情況不允許呼叫。

析構函式:籠統的說是銷毀物件的時候進行呼叫。但是呼叫的時間不一定一樣,有些時候當退出程式的時候,系統將收回分配的空間,這時就會呼叫析構函式;有些情況下,在程式進行過程中,使用delete 函式來銷毀動態分配的物件,這時就會呼叫析構函式來釋放記憶體空間。

8樓:匿名使用者

建構函式在你定義該類的物件時自動呼叫

析構函式,要麼在你的物件結束作用域的時候自動呼叫,還有乙個就是如果你定義的物件是動態new開闢的空間,要麼用delete釋放動態空間時自動呼叫。

9樓:

概括的可以認為「只在建立物件和銷毀物件時」,建構函式在定義類物件時被呼叫,而在釋放或是銷毀類物件時則呼叫析構函式

c++析構函式在什麼時候自動呼叫?

10樓:周雲的問題

析構抄函式(destructor) 與建構函式相反,當物件脫離其作用域時(例如物件所在的函式已呼叫完畢),系統自動執行析構函式。析構函式往往用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在析構函式中用delete釋放)。

11樓:匿名使用者

p1.~point(); 你自己呼叫了一次,但是沒有析構物件

主函式結尾,程式結束前,銷毀物件自動呼叫析構函式,構造了兩個物件呼叫兩次

12樓:匿名使用者

在函式退出時會自動調查用!和建構函式相板的。

c 中析構函式可以實現什麼,c 中的虛擬析構函式有什麼作用?

析構函式名與類名相同,只是在函式名前面加乙個位取反符 例如 stud 以區別於建構函式。它不能帶任何引數,也沒有返回值 包括void型別 只能有乙個析構函式,不能過載。如果使用者沒有編寫析構函式,編譯系統會自動生成乙個預設的析構函式 即使自定義了析構函式,編譯器也總是會為我們合成乙個析構函式,並且如...

C什麼時候需要用到析構函式,C 中析構函式具體是什麼時候被呼叫

有點偏頗.析構函式 是在你的類執行 結束後 再執行的方法。釋放資源只的他的乙個作用之一。必須說這類執行結束了,你操作其它的類或者其它的內容就用到它了。釋放資源只是它作用一種。如果是託管了,系統就會自己幫你釋放的。不過有的程式設計師控制能力比較強,託管的也自己來操作釋放。這樣可以系統資源最大話利用。析...

C建構函式和析構函式的使用問題

注意我和你有些地方寫法不太一樣,建構函式我一般喜歡這樣寫。include class carray float getfloat int index re取浮點陣列中第index個元素,index從0開始 carray 析構函式,釋放動態分配的記憶體空間void print 分別輸出整形陣列和浮點陣...