3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個贊
C++無論何種數(shù)據(jù),是否要delete關(guān)鍵看其空間是否使用new分配的。
1,函數(shù)沖定義的局部變量指針,單純是一個局部變量是不用delete;
2,C++ 如果類中有一個指針數(shù)據(jù)成員,而沒有用new, 析構(gòu)函數(shù)也是不用delete的;
在類或函數(shù)中,int* ,char* 這些只要不是new的,也同樣不用釋放,系統(tǒng)會自動把他們占的內(nèi)存釋放掉,只有new的才會手動的去delete
原理:
int*, char* ,這些定義是局部變量,存在于棧上,比如int *p;p在棧上,而且p的值也是棧的一個地址。
但是當(dāng)int *p = new int ;這時候,p這個變量是在棧上的。但是p的值是一個地址,這個地址是堆上的一個地址。如果不delete p;那么,這個地址會一直被占用著,不能被其他的對象所使用,所以我們用完這個地址,要把這個地址釋放掉。
因此棧的空間會自動釋放,而堆里的空間必須手動釋放。

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個贊
是否需要對指針delete取決于指針指向的內(nèi)存是否是用new操作符申請的。 用了new表示動態(tài)分配了內(nèi)存,需要用delete將內(nèi)存還給系統(tǒng)。 對于不是動態(tài)申請的內(nèi)存,在對象聲明周期結(jié)束后就會自動刪除,不需要delete。

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個贊
當(dāng)然需要。凡是使用new申請的內(nèi)存,系統(tǒng)都不會自動釋放的,都需要你手動delete,如果申請的是數(shù)組,也就是new [] ,就需要對用的手動delete[] .
不論在哪里,都需要,不分局部還是全局。
- 3 回答
- 0 關(guān)注
- 5030 瀏覽
添加回答
舉報(bào)