C++中delete 与 delete[]

5 篇文章 0 订阅

1.从反汇编的结果看,两者都是一样的。只不过对于对象数组(非编译器定义的类型),delete[]调用全部的析构函数,而delete只调用一次析构。编译器定义的类型,如int,char,string,byte等都是可以正确释放的。
2.规范化编程为好,delete与new配套,delete[]与new []配套使用。
3.最好是自己定制delete与new,因为可以在里面加入一些条件,比如防止删除null指针、内存缓冲池(防止内存碎片)、按需分配(编译器实际申请的内存会比需要申请的多)。
4.也可以使用宏定义来实现内存申请释放操作,防止删除null指针:

   
  
  
  1. #ifndef SAFE_DELETE 
  2. #define SAFE_DELETE(p)                   
  3. {if(p != NULL) { delete (p); (p) = NULL; } } //Delete object by New create  
  4. #endif 
  5.  
  6. #ifndef SAFE_DELETEA     //Delete Arrary 
  7. #define SAFE_DELETEA(p) {if(p != NULL) {delete[] (p); (p) = NULL;}}       
  8. #endif 
  9.  
  10. #ifndef SAFE_RELEASE 
  11. #define SAFE_RELEASE(p) {if(p != NULL) { (p)->Release(); (p) = NULL; } } 
  12. #endif 
  13.  
  14. #ifndef SAFE_FREE 
  15. #define SAFE_FREE(p) {if(p != NULL)   { free(p); (p) = NULL; } } 
  16. #endif 
  17.  
  18. #ifndef SAFE_GLOBAL_FREE 
  19. #define SAFE_GLOBAL_FREE(p) {if(p != NULL) { GlobalFree(p); (p) = NULL; }} 
  20. #endif
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值