文章目录
new/delete与malloc/free区别
基本数据类型:int, char, short, long, double…及数组
int *p = new int(5);
cout<<" p="<<p<<endl;
delete p;//free(p);//对于基本数据类型,效果一样,数组delete []p;
cout<<" p="<<p<<endl;
p = nullptr;//*delete不会改变指针的值,为了避免迷途指针,delete之后指针设定为nullptr
delete p;//nullptr不会导致迷途指针
// delete free对于基本数据类型,释放两次都会出错,
// free 不改变指针的值,delete会改变,delete之后指针指向一个特定的位置
int *p1((int *)malloc(4));
cout<<" p1="<<p1<<endl;
*p1=4;
cout<<" p1="<<p1<<endl;
free(p1);
cout<<" p1="<<p1<<endl;
自定义类型myData
class mydata{
public://c++ class 默认private,如果都不写,系统会自动分配为两个public空的构造、析构函数
void *p;
mydata(){
//构造
p = malloc(1024*1024*100);
cout<<"mydata create"<<endl;
}
~mydata()//析构
{
free(p);
cout<<"mydata delete"<<endl;
}
};
//mydata d1;
void test(){
mydata t1;
}
int main(){
// test();
//mydata *p = (mydata *)malloc(sizeof(mydata));//malloc不调用构造函数
mydata *p = new mydata;
//free(p);//free不调用机构函数
delete p;
}
new/delete单个对象以及数组注意事项
*对自定义类型需要严格配对 new []/ delete []或者new/delete。
int *p = new int[3]{
1,2,3};
cout<<p<<endl;
delete []p;//对于基本数据类型,效果一样,数组delete []p和delete p效果一样;
//单个堆上的对象,调用delete []p会一直调用delete; 自定义类型数组,调用delete []会根据数组个数调用相应次数的析构函数, 调用delete则只调用一次。
new分配内存,静态区\栈\堆
char str[1024] = {
0 };//内存全局静态区
int main(){
// char str[1024] = { 0 };//栈区
// char *str = new char[1024]{ 0 };//堆区
int *p = new