new和malloc區別?delete和free區別?
malloc和free是C語言的庫函式
new和delete叫做運算子
malloc是否開辟成功是通過回傳值和空指標比對判斷.和new開辟失敗會拋出例外.bad_alloc
new 不僅可以做記憶體開辟,還可以做記憶體初始化操作.
點擊查看代碼
int *p =(int *)malloc(sizeof(int));
// malloc按照位元組開辟空間,回傳的是void *,需要自己強轉到指定型別.
//malloc只負責空間開辟,不負責初始化
if(p==nullptr){
return -1;
}
*p=20;
//釋放malloc申請的空間地址,只需要將p地址傳入即可
free(p);
//new 成功與否通過例外捕捉實作
try{
int *p1=new int(20);
delete p1;
}catch(const bad_alloc &e){
}
//C語言開辟陣列空間
int *arr1=(int *)malloc(sizeof(int) * 20);
if(arr1==nullptr){
return -1;
}
free(arr1);//C語言無論是釋放單個元素還是陣列 都是傳入地址即可.
//C++ 開辟陣列空間
int *arr2 =new int[20]; //堆上只負責開辟空間不會做初始化
int *arr3 =new int[20](); //堆上開辟空間,同時負責初始化為0
int *arr4=new int[20](40);//堆上開辟空間,并且初始化值40
//注意new 成功還是失敗不要通過和nullptr對比方式,而通過捕獲例外方式來判斷
delete[]arr2;
//注意delete在釋放單個元素的時候不需要[] 而在釋放陣列空間的時候要[]
C++中new 的方式有哪幾種?
點擊查看代碼
int *p=new int(20);
int *p2=new (nothrow) int;
cont int *p3=new const int(10);//在堆空間開辟一個常量
//定位new
int data=https://www.cnblogs.com/erichome/p/100;
int *p4=new (&data) int(200);//在指定的位置 開辟空間,放入200值
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/525850.html
標籤:C++
