c 中不用new也能用delete嗎?什麼情況下要用new,什麼情況下不要用啊

2021-08-16 03:09:13 字數 2877 閱讀 9410

1樓:

這裡已經使用了new:lnode *s=new lnode;

new和delete還是要求成對使用的

2樓:召走刀文

首先,new和delete要成對使用,否則會造成記憶體洩漏。

什麼時候使用new,使不使用完全取決於程式設計人員。

new的作用是在堆記憶體中申請一塊記憶體,並且申請記憶體的大小可以在程式執行時動態的決定。這個就是堆記憶體的最大價值之一。因為,於區域性變數的棧記憶體,全域性變數和static變數的靜態記憶體都必須在編譯階段確定,在執行時無法改變。

所以,類似連結串列這種,事先無法確定節點個數(也就是無法確定要多少記憶體),在執行時動態決定節點個數的情況,當然是用堆記憶體合適了。

3樓:匿名使用者

指標,動態陣列的時候用new,釋放記憶體時用delete

4樓:匿名使用者

我是這樣子理解的,因為你的s=temp->next,其實也是在建立時呼叫過new才生成的一個節點,所以即使在刪除函式中顯式的看起來沒有呼叫過new,其實在之前是隱式呼叫過的。所以巨集觀上來說,new和delete仍是成對出現的。

c++裡什麼時候需要用new和delete語法

5樓:匿名使用者

如果以後你學mfc,那基本上都是要用指標的,那麼new就常用了,new是在堆上建立物件,他儲存的地址不會自動銷燬,但是如果不用new那麼在函式

void func()

void main()

void main()

注意上門兩個程式都是片段還有class student{};沒有宣告和定義,只是為了說明問題

6樓:匿名使用者

動態建立陣列的時候

例如我有很多個數

但是我不用人工去數

用函式去計

如int i=sizeof(a);//求出a的大小int *p = new int[i];建立陣列p[i],其中i就是(a大小)個

delete p;刪除p陣列

7樓:匿名使用者

當需要輸入的值或計算的值來確定陣列的大小時

new和delete運算子分別用於為指標變數動態分配記憶體空間和動態收回指標所指向的記憶體空間

8樓:匿名使用者

動態申請儲存空間的時候

c++中的new 和delete 什麼情況下使用? 求詳細解釋一下。

9樓:匿名使用者

這個是必須的啊。用new分配了一塊記憶體,在使用完之後必須釋放掉,否則就是記憶體洩露;指標也必須置空,不然這個指標就變成野指標了。以上兩點都是隱患。

有時候不釋放也不會出問題,但new和delete一起使用這是標準c++的規則,我們學習應該按照標準來。所以解構函式應該是~lcs()

在c++中,釋放new分配的記憶體空間時,使用delete和delete[]是不是有區別?詳細說明下

10樓:匿名使用者

c++告訴我們在**用 new 分配的單個物件的記憶體空間的時候用 delete,**用 new 分配的一組物件的記憶體空間的時候用 delete。

樓主的這個問題提得很好。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。

關於 new 和 delete,其中又分為兩種情況:(1) 為基本資料型別分配和**空間;(2) 為自定義型別分配和**空間。

對於 (1),上面提供的程式已經證明了 delete 和 delete 是等同的。但是對於 (2),情況就發生了變化。請看下面的程式。

#include ;

using namespace std;

class t

~t()

};int main()

大家可以自己執行這個程式,看一看 delete p1 和 delete p1 的不同結果,我就不在這裡貼執行結果了。

從執行結果中我們可以看出,delete p1 在**空間的過程中,只有 p1[0] 這個物件呼叫了解構函式,其它物件如 p1[1]、p1[2] 等都沒有呼叫自身的解構函式,這就是問題的癥結所在。如果用 delete,則在**空間之前所有物件都會首先呼叫自己的解構函式。

基本型別的物件沒有解構函式,所以**基本型別組成的陣列空間用 delete 和 delete 都是應該可以的;但是對於類物件陣列,只能用 delete。對於 new 的單個物件,只能用 delete 不能用 delete **空間。

所以一個簡單的使用原則就是:new 和 delete、new 和 delete 對應使用

11樓:匿名使用者

如果new得是一個變數,那麼使用delete就可以。

但是如果new得是一個陣列,使用delete的話只能釋放陣列的第一個元素佔用的記憶體,這會造成嚴重的記憶體洩漏的。

使用new申請的陣列應該使用delete來銷燬它。

12樓:匿名使用者

delete一般只釋放用new所分配的,並且只分一個型別的大小的記憶體,每個delete和new對應;而delete釋放用new所分配的,並且為同一種型別的多個元素一次所分配的記憶體。也就是用new一次為一個元素分配記憶體時,用delete;而用new一次為一個集合(陣列)分配記憶體時,用delete。如char *p=new char時用delete p;youclass *pclass=new youclass時用delete pclass;又如用char *p=char[10]時用delete p;youclass *pclass=new youclass[10]時用 delete *pclass;

13樓:匿名使用者

delete 是銷燬一個變數!delete 是銷燬一個變數陣列

c中new和override的區別

如果你用override,則無論呼叫的是a類還是b類中的test 系統都會找到它實質類的test 如果是用的new,則可以通過型別轉換呼叫到基類的test 下面是override的情況 a a new a b b new b a a1 new b a.test 呼叫a中test b.test 呼叫b...

c中new到底有什麼用

區域性變數的儲存位置在棧內 vs下一個執行緒預設棧是1m 函式體結束就自動 new malloc 分配的空間在堆內,理論上是2g 如果不手動free delete,這個空間是不會被釋放的。如果要申請的記憶體比較大,就要用new,否則使用棧空間是不可能成功的。new 在堆中分配一塊記憶體空間,一般都需...

請教 C 中,在中new申請的記憶體用完不刪,會導致記憶體洩露嗎

先來進行分析抄一下 fucntion函式裡的 int p new int 100000 做的事情 1 申請了一 片記憶體int 100000 2 申請了了一個指標變數 p。同時p指向這片記憶體。在子函式結束以後,會做的事情 1 銷燬指標變數 p 注意 只是銷售了指標變數,並不會自動的 int 100...