C++中delete和delete的区别
1个回答
展开全部
两者之间区别的通俗理解是,delete是释放一个单位的堆空间,而delete是删除多个单位堆空间。
比如
int *p1=new int;//释放p1使用delete p1;或者delete[]p1;都是可以的,表示释放1*sizeof(int)个堆空间。
int *p2=new int[10];//如果需要完全释放首地址为p2的堆空间,需要使用delete[]p2;,顺便说一下,delete p2;的结果是p2开始int长度的堆空间被释放,剩下的9*sizeof(int);个堆空间仍然留着。
PS:实际尝试下来(比如VS 2013编译器),针对比如int[],char[]之类的简单数组,delete与delete[]效果完全相同,但是遇到释放class或者struct类型动态空间时候,却会产生不同结果。比如
这时候delete p与delete[]p会产生不同结果,前者会直接报错。
感觉是delete[]比delete更加“细心”,也就是delete仅仅停留在表面,而delete[]不但会逐个释放第一层t为首的堆空间,而且在释放前还会读取此空间上存放的地址,进入实体类对象的空间,因此会调用类内的析构函数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询