3 回答

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

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

TA貢獻1806條經驗 獲得超8個贊
當然需要。凡是使用new申請的內存,系統都不會自動釋放的,都需要你手動delete,如果申請的是數組,也就是new [] ,就需要對用的手動delete[] .
不論在哪里,都需要,不分局部還是全局。
- 3 回答
- 0 關注
- 4982 瀏覽
添加回答
舉報