国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

free、delete與delete[]的使用

2019-11-08 02:24:33
字體:
來源:轉載
供稿:網友

free、delete與delete[]的使用

首先new與delete成對出現,自己的代碼中需要對自己new出來的東西負責。 一般來說,new一個對象的話delete它就好了,但是new[]的話需要使用delete[],實際上,對于基本類型,new[]之后delete與delete[]差別不大,但是對于對象,由于對象析構函數的存在,delete將只會調用數組第一項的析構函數,而delete[]則會挨著調用它們的析構函數,所以對于數組應該使用delete[]回收內存。 代碼:

class A{public: A(){cout<<"constructor"<<endl;} ~A(){cout<<"destructor"<<endl;}};int main(){ auto a=new A[3]; delete a; a=0; cout<<endl; auto b=new A[3]; delete []b; b=0; getchar(); return 0;}

__結果: 這里寫圖片描述

小結 - 1、delete[]挨個調用了析構函數進行處理,如果類的析構函數中存在一些釋放、清除操作的話,錯用delete處理new[]就會出現問題甚至內存泄漏 - 2、free與malloc成對出現,與new和delete的區別主要是new會生成空間,并且會調用構造函數,delete調用析構函數并釋放空間,而malloc、free只是申請、釋放空間而已 - 3、free和delete之后都需要將指針置0,以防止再次訪問或者再次清除空間,這很可能會導致程序崩潰和不可預期的結果,很可能會出現很難追蹤的bug,而實際上free(0)和delete 0都是合法且不會出問題的 對于如下代碼:

auto c=(int*)malloc(sizeof(int)); if(c!=NULL) { free(c); c=0; }

由于free(0)是合法并且不會出問題的,所以判斷指針合法性也不是必須的,可寫為:

auto c=(int*)malloc(sizeof(int)); free(c); c=0;
上一篇:codeforces 607B dp

下一篇:SpringMvc常用注解

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 女性| 定襄县| 垣曲县| 临泽县| 福泉市| 金坛市| 南涧| 桂东县| 无锡市| 宜春市| 新化县| 甘肃省| 时尚| 桂平市| 炎陵县| 石城县| 福州市| 东海县| 花垣县| 凉山| 金秀| 仙桃市| 无极县| 华容县| 广宗县| 牙克石市| 青岛市| 冷水江市| 彭州市| 于田县| 崇州市| 九江县| 龙井市| 镇宁| 刚察县| 广元市| 太仆寺旗| 抚远县| 高安市| 阜阳市| 濉溪县|