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