1
new和delete的使用
new其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。
通常来说,当在局部函数中new出一段新的空间,该段空间在局部函数调用结束后仍然能够使用,可以用来向主函数传递参数。另外需要注意的是,new的使用格式,new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。
例如
int *p=new int(5);
而且使用new开辟堆空间后,需要再使用delete释放空间,不然会造成内存泄露。
new除了能申请int,double这种数据类型外,还可以为类申请内存空间。
例如
Complex *p =new Complex(1,1);
Complex *q=new Complex[3];
值得注意的是,上述代码第一行是创建了一个对象,而第二行则创建了三个对象。因此在delete操作时也有差异
delete p;
delete [] q;
第二行的delete不加[]也会造成内存泄露(三个对象只删掉了第一个)
2
new 的作用
new包含了三个动作:首先它会向堆申请内存空间,随后进行转型,最后则是调用构造函数初始化对象
3
delete的作用
首先是调用析构函数,再释放内存空间
4
不同类型对象的存在时间
定义在栈上的对象离开{}定义域就消失,全局对象和静态对象保持到程序运行结束消失,堆上的对象不调用delete就一直存在