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 }

 

posted @ 2018-01-03 17:05  小油菜1  阅读(284)  评论(0编辑  收藏  举报