亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++中 函數中定義的局部指針需要delete嗎?

C++中 函數中定義的局部指針需要delete嗎?

胡子哥哥 2019-02-12 10:11:45
例如:void f(){double *p; /***///delete [] p ;是否需要?}函數結束后,這個指針p需要手動釋放嗎如果定義成double *p = new double;需要delete 嗎?
查看完整描述

3 回答

?
開心每一天1111

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;那么,這個地址會一直被占用著,不能被其他的對象所使用,所以我們用完這個地址,要把這個地址釋放掉。
因此棧的空間會自動釋放,而堆里的空間必須手動釋放。

查看完整回答
反對 回復 2019-03-22
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

是否需要對指針delete取決于指針指向的內存是否是用new操作符申請的。 用了new表示動態分配了內存,需要用delete將內存還給系統。 對于不是動態申請的內存,在對象聲明周期結束后就會自動刪除,不需要delete。

查看完整回答
反對 回復 2019-03-22
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

當然需要。凡是使用new申請的內存,系統都不會自動釋放的,都需要你手動delete,如果申請的是數組,也就是new [] ,就需要對用的手動delete[] .
不論在哪里,都需要,不分局部還是全局。

查看完整回答
反對 回復 2019-03-22
  • 3 回答
  • 0 關注
  • 4982 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號