33)new和delete关键字
------------------------------------------------------------------------------------------------------------------------------------------------------
(1)int *p=new int(10);//就是在堆区申请一个int,然后赋值为10
(2)int *p=new int【10】; //申请一个数组 含有10个元素,p是这个数组的首地址
(3)其实平时可以 int a(10); //其实int也是一个类
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(1)malloc和free的区别:malloc和free是标准库的函数 stdlib.h中的
(2)new和delete是C++语言的操作符,是集成进去的,不用什么头文件,也不用压栈和出栈,这个就有了省时间
(3)new构造一个对象时,会调用类的构造函数,但是 malloc却不会,必须手动去实例化类的成员变量
(4)free在销毁对象时,不会调用析构,但是 delete会调用析构函数
(5)
--------------------------------------------------------------------------------------------------------------------------------------------
1)new和delete,实际上和sizeof一样,是操作符,不是函数
2)动态的分配和撤销内存空间,例如C的malloc和free是对堆内存的申请和释放,在C++中,用 new 和delete来进行
3)但是,为了和C语言兼容,还是保留了 malloc和free
4)看两段代码,实现一样的功能,但是不同的写法:
1 //C语言写法 2 void test1() 3 { 4 int *p=(int *)malloc(sizeof(int)); 5 *p=10; 6 if(p!=NULL) 7 { 8 free(p); 9 p=NULL; 10 } 11 12 } 13 //C++写法 14 void test2() 15 { 16 int *p=new int; 17 *p=10; 18 if(p!=NULL) 19 { 20 delete p; 21 } 22 }
5)然后 开辟数组,用new和delete
1 //C语言写法 2 void test1() 3 { 4 int *p=(int *)malloc(sizeof(int)); 5 *p=10; 6 if(p!=NULL) 7 { 8 free(p); 9 p=NULL; 10 } 11 //如果开辟一个数组 12 int *p=(int *)malloc(sizeof(int)*10); 13 14 for(int i=1;i<=10;i++) 15 { 16 p[i]=i; 17 } 18 } 19 //C++写法 20 void test2() 21 { 22 int *p=new int; 23 *p=10; 24 if(p!=NULL) 25 { 26 delete p; 27 } 28 29 //开辟数组 30 int *p=new int[10]; 31 for(int i=1;i<=10;i++) 32 { 33 p[i]=i; 34 } 35 }