new和delete的基本⽤法
前⾔
  new和delete是C++中⽤来动态管理内存分配的运算符,其⽤法较为灵活。如果你对它们的⼏种不同⽤法感到困惑,混淆,那么接着看下去吧。
功能⼀:动态管理单变量/对象空间
  下⾯例⼦使⽤new为单个变量/对象开辟空间:
1// 创建⼀个指向整型元素的指针pi,其所指对象为整数100。
2int *pi = new int(100);
3
4// 创建⼀个指向字符串元素的指针ps,其所指对象为字符串"ssssssssss"。
5string *ps = new string(10, 's');
  对于开辟的单变量/对象空间,我们只能通过new操作符返回的指针来控制,⽽不能通过变量名/对象名。另外,如果上述定义式右边的 ()为空,则对变量/对象进⾏值初始化,⽽如果连 () 都没有,则进⾏默认初始化。(这⾥假定你已清楚值初始化和默认初始化的区别)
  当这部分空间使⽤完毕,应当使⽤delete将其回收,上述例⼦对应回收语句如下:
1 delete pi;
2 pi=NULL;
3
4 delete ps;
5 ps=NULL;
truncatedelete和drop的区别
  需要说明的是:1. 每个new都必须对应⼀个delete 2. ⼀个内存空间只能被delete⼀次(下⾯这种功能实现也要满⾜这两点)
功能⼆:动态管理数组空间
  下⾯例⼦使⽤new为数组开辟空间:
1// 创建⼀个"数组指针"pia,pia将指向⼀个含有10个整型元素的数组的第⼀个元素。
2int *pia = new int[10];
3
4// A是类名
5// 创建⼀个"数组指针"pib,pib将指向⼀个含有10个A类对象的数组的第⼀个对象。
6 A *pib = new A[10];
  对于开辟的数组空间,我们只能通过new操作符返回的指针来控制,⽽不能通过数组名。另外,如果上述定义式右边末尾加上空 (),则数组进⾏值初始化,否则数组元素是未定义的(如本例)
  当这部分空间使⽤完毕,应当使⽤delete将其回收,上述例⼦对应回收语句如下:
1 delete [] pia;
2 pia = NULL;
3
4 delete [] pib;
5 pib = NULL;
  需要特别注意delete右边的那个[],如果遗漏,将很可能导致难以预料的错误。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。