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 分別輸出整形陣列和浮點陣...