c解構函式何時呼叫,C 解構函式何時呼叫

時間 2021-09-04 02:34:23

1樓:

建構函式是建立的時候也就是new的時候呼叫,析構是釋放也就是delete的時候呼叫,你new的話應該是呼叫建構函式 也就是

date()

{};date(int i);

2樓:

程式第39行,people的建構函式裡面有一行date birthday(1);

建立了一個date類的臨時變數。

當函式退出的時候,這個變數也會被撤銷,所以執行了date的解構函式

3樓:手機使用者

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

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

希望能解決您的問題。

4樓:何度千尋

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

解構函式在類建立出來的物件的生命週期結束的時候將會被呼叫。

c++解構函式何時會被呼叫?

5樓:匿名使用者

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

6樓:千鋒教育

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

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

1、動態宣告的物件

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

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

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

7樓:匿名使用者

解構函式執行時機: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++中,解構函式在什麼時候才會被呼叫?

8樓:匿名使用者

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

釋放資源。舉例入下

class a

~a()

}}// end of class a

9樓:匿名使用者

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

另外,你這裡說反了,如果去掉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中執行的結果。

10樓:0無_心

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

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

11樓:匿名使用者

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

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

12樓:匿名使用者

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

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

13樓:

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

c++解構函式什麼時候才會被呼叫

14樓:匿名使用者

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

釋放資源。舉例入下

class a

~a()}}

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

15樓:周雲的問題

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

16樓:匿名使用者

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

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

17樓:匿名使用者

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

解構函式的呼叫,解構函式在何時呼叫

在vc中除錯的話,你可以主動刪除物件,這樣就會呼叫解構函式int main 修改為int main 如樓上所說,如果你的程式視窗是在程式執行後立即關閉的話,你肯定看不到呼叫解構函式的資訊.因為解構函式的呼叫是在main結束後,也就是system pause 執行後,而不是你想像的那樣先呼叫,然後再執...

深度分析c 解構函式的作用,深度分析C 解構函式的作用

這樣的問題,有一個最實用的方法,就是去跟一下彙編的 當然了這需要你懂一點點的組合語言.問題的原因就是 當你呼叫基類的解構函式d.base base 時,c 會先把d物件中的虛擬函式表改變一下,原來指向derived類的虛擬函式表,現在指向base類的虛擬函式表.彙編 為 004116e3 mov e...

c 中解構函式在成員函式中的呼叫問題

因為第二種方法你沒有定義拷貝建構函式,所以ab operator int a 執行完之後,返回的是return this,會在記憶體中再次構造一個ab的物件,並且把 this指向的物件按位拷貝給這個物件,建立這個物件的時候,會用到x new int 2 分配一段記憶體。由於有a 3 會再次呼叫按位拷...