C++中new和delete的用法

new开辟时:

1:new开括的是堆区的内存,堆区的内存都是需要程序员手动释放,释放时使用delete,而栈区的内存由系统自己释放,不需要程序员操作。学习的暂时只是用于定义数组。说成“把地址赋给指针”

2:由于new开括的是一块地址,所以需要一个指针来接收这个地址。

3:可以分为是不是数组,不是数组的话有两种方法开辟地址;

int * p1 = new int ;//只定义没有初始化
int * p2 = new int (3);//给 p2初始化了;

 定义数组时有一种,定义的数组成为动态数组

int n ;
cin >> n ;
int * p3 = new int[n];

 当然也可以直接

int * p4 = new int[3];

将数组放到堆区,能够让我们在不想使用它时释放内存,而不用一直等待系统去释放它,因为在一些程序中我们可能会用到非常大的数组,或者非常多的嵌套、递归,使用堆确保随时释放是非常明智的。

delete删除时:

1:可以分为是不是数组;

不是数组的话直接

delete p1 ; 
p1 = NULL ;

是数组时

delete [] p3 ;
p3 = NULL ;

释放数组内存时需要在delete的后面加上[],但中括号里面不需要有数组的大小。

在最后都应该指向NULL;不然释放内存后p1就变成了空指针,还会指向内存且有危险。还要谨防重复释放内存,也会有危险,在浅拷贝时会遇到重复释放,应该使用深拷贝,即再开辟一块内存,指针指向另一块内存。

要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。

   

你可能感兴趣的:(c++)