当前位置: 首页 > 工具软件 > delete > 使用案例 >

C++中delete 与 delete[]

宋奇希
2023-12-01

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
 类似资料: