国产探花免费观看_亚洲丰满少妇自慰呻吟_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常用注解

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卫辉市| 龙井市| 正定县| 南江县| 郸城县| 西城区| 日照市| 大同县| 陵川县| 漳浦县| 北京市| 海南省| 白玉县| 丰宁| 台中市| 峨山| 四川省| 浦城县| 涪陵区| 高邮市| 桦川县| 榕江县| 博乐市| 汉寿县| 阿坝县| 新平| 措勤县| 朝阳区| 尖扎县| 保亭| 同德县| 云霄县| 称多县| 平凉市| 莎车县| 定州市| 沅江市| 漳浦县| 昌图县| 儋州市| 永城市|