delete某個類的指標會呼叫該類的析構函式嗎?

時間 2023-02-25 16:20:05

1樓:

當類的物件離開了它的作用域或者delete表示式應用到乙個類物件的指標上時,析構函式會自動呼叫。

c++中delete乙個類指標會呼叫該類的析構函式嗎?

2樓:秋優悠改海

如果函式不是。

virtual

的,則進行的是靜態繫結,即在編譯期間就決定了其呼叫的函式。

對於上面的程式來說,delete

bp2;,即使基類指標bp2實際上指向的是派生類物件,但是編譯器也會把這個基類指標和指向型別(基類)的析構函式進行靜態繫結,從而達不到呼叫派生類析構函式的目的。

3樓:小黑跳大不解釋

會被呼叫啊。

這就是析構函式的作用啊。

或者你可以嘗試在析構函式裡面加點輸出語句 看看會不會輸出又或者你可以設定斷點在那裡 然後一步一步除錯 看看會不會進去析構函式。

4樓:star灬龍翔天宇

new會呼叫建構函式。

delete會呼叫析構函式。

求採納。

c++ 如果類中有乙個指標資料成員,而我沒有用new, 析構函式要不要delete?

5樓:

變數實際占用的記憶體分兩種分配情況:

一種在棧(stack)上分配,直接宣告變數就是在棧上分配的、無法通過new來在棧上分配,無需delete

一種是在堆(heap)上分配,通過new等方式分配,需要delete

1)如果類中有乙個指標資料成員,而我沒有用new, 析構函式要不要delete?

不需要。2)類中的那些int, char之類的, 為什麼都不用delete, c++是自動把他們占得記憶體給釋放掉了嗎?

類物件在分配的時候,就連同內部的int、char這些變數也分配記憶體了,類物件釋放的時候、這些變數也會隨著釋放。

當類物件在stack上分配,那就沒有什麼需要特別處理的。

當類物件在heap上分配,只要delete掉類物件,這些int、char變數也就跟隨著釋放掉了。

6樓:歌夢復興

不用,delete必須要和new配套使用。int,char的記憶體是使用的堆疊記憶體,而new出來的物件是儲存在堆記憶體,堆記憶體的申請和釋放是由程式設計師自己操作的;堆疊記憶體中的資料只要生命週期結束了會自動釋放,不用自己去delete的。

7樓:網友

開闢變數生成在堆區,要自己釋放,不然倒置記憶體洩露!開闢變數在棧,在它的scope(存活區域)外,系統自動釋放。c++中的物件都是在堆區的。

類成員隨著物件的delete而消失。而臨時變數時過了生存週期就掛了。

8樓:閃閃紅紅星

delete 和new是成對使用的,你沒new,當然不需要delete。

是的,你說的int,char之類是在執行棧中存放的,c++自動釋放他們的記憶體。

9樓:小何才露尖尖角兒

c++ 如果類中有乙個指標資料成員,而你沒有用new, 析構函式是不用delete的?在類中,int char 這些只要不是new的,也同樣不用釋放,系統會自動把他們佔的記憶體釋放掉,只有new 的才會手動的去 char ,這些基本型別,是區域性變數,存在於棧上。

而乙個指標定義的時候,也是在棧上比如int *p;p在棧上,而且p的值也是棧的乙個位址。但是當int *p = new int ;這時候,p這個變數是在棧上的。但是p的值是乙個位址,這個位址是堆上的乙個位址。

如果不delete p;那麼,這個位址會一直被占用著,不能被其他的物件所使用,所以我們用完這個位址,要把這個位址釋放掉。不知道你懂了沒有,不懂的再追問。

c++delete是如何釋放記憶體的? 就拿delete物件指標來說把 我知道這樣會隱式呼叫析構函式

10樓:幻形術

如果把delete操作符理解為乙個函式,那麼內部是先呼叫物件的析構函式,再呼叫free()釋放。

如果建構函式new了乙個物件並使用成員指標變數儲存的話,那麼必須在析構函式delete它,這句話是什麼意思

11樓:匿名使用者

析構函式和建構函式,應該是public才行,這樣外部才能呼叫。析構函式用來釋放物件的,如果你的物件不是動態生成的,是不需要釋放的。如你的inttest,這不是動態生成的,是不需要釋放的。

下面我寫乙個例子給你:#includeusing namespace std;class test ~test() void main()

在c++中,為什麼用基類指標ap建立派生類動態物件,用delete刪除物件時,只呼叫基類的析構函式呢??

12樓:匿名使用者

如果函式不是 virtual 的,則進行的是靜態繫結,即在編譯期間就決定了其呼叫的函式。

對於上面的程式來說, delete bp2;,即使基類指標bp2實際上指向的是派生類物件,但是編譯器也會把這個基類指標和指向型別(基類)的析構函式進行靜態繫結,從而達不到呼叫派生類析構函式的目的。

13樓:陽頂天鹿鼎記

這是類的繼承的乙個特性,父類的一切東西都會由子類繼承。

c++中,析構函式和delete各有什麼作用啊

14樓:開冷桖

我燥!有機會學不好好學,就md來這裡請教?

a肯定是對的,delete對無效位址不影響地處理了。

本來動態必須手動釋放的,可建構函式沒有new,那麼析構不用處理,處理了也不會錯。

其實b好象也對。自己做的,構造沒new,析構沒有delete,有錯麼?

c++的析構期待編譯器?

還不對。。。如果引用了外部new出來的,必須指定為null!

否則。。。一樣的要麼越界,要麼記憶體不能釋放!

反正哥只選a地。

15樓:網友

析構函式釋放宣告的類物件。

delete釋放用new動態記憶體分配的物件,指標等。。。

16樓:你歇比吧

我們在初始化乙個類的時候,這個類的"建構函式" 首先被執行了,也就是說 "建構函式"是開始時執行的,而"析構函式"函式正和它相反,"析構函式"是結束時執行的。

當你用new例項化出來乙個物件的時候,可以用delete 來銷毀這個類的物件,程式就會自動呼叫"析構函式".也就是說delete是和new配合使用的,"new例項化,delete 銷毀。

沒有實用new例項化出來的物件 程式會自動呼叫 "析構函式".

給你個例子吧。

class obj

~obj()

};void main()

在析構函式中呼叫delete this,會不會有問題

c++動態分配的類物件可以在析構函式裡delete嗎?如果可以,還需要在外部delete嗎?

17樓:匿名使用者

delete 表示式會呼叫析構函式。

如果在析構函式中使用 delete 表示式,後者呼叫析構函式,如此一來就是遞迴……

delete指標的指標,delete掉的是什麼

du瓶邪 簡單的測試 c c code 此處t是不完整型別 編譯會出錯 typedef char t typedef char type must be complete sizeof t 1 1 void sizeof type must be complete 此處t是完整型別 編譯不會出錯 t...

jsp裡引用了js檔案會呼叫js的什麼方法

千鋒教育 jsp裡引用了js檔案會呼叫程式中已經呼叫過的js方法,但是全部方法都會載入進來,不是全部都執行。js檔案的引入方法 注意事項 這樣無論頁面是什麼編碼,都可以正常的訪問這個js中的內容。 出家人詞悲 jsp引用js檔案的路徑有以下三種 1.使用相對於jsp頁面的相對路徑 這樣在頁面使用ht...

php呼叫另乙個php檔案的某個方法!

包含了檔案後。直接用函式名 引數 就可以了。希望你的問題能解決,望採納。php php php php php怎麼呼叫呼叫另乙個php方法檔案 你在裡面想呼叫裡面的函式,就用。require 把檔案包含進來就可以呼叫方法了。include once 引用你要的php檔案 這樣你就可以用裡面的方法了。...