代码如下:
#include <stdio.h>
#include <stdlib.h>
#define SAFE_FREE(ptr) do { free(ptr); ptr = NULL; } while(0)
#define SAFE_DEL(ptr) do { delete ptr; ptr = NULL; } while(0)
#define SAFE_DELARR(ptr) do { delete [] ptr; ptr = NULL; } while(0)
int main(int argc, char **argv)
{
char* p = new char[100];
SAFE_DELARR(p);
//system("pause");
return 0;
}
实现安全释放指针的机制正是上面的三个宏,其本质就是在释放了指针后,一定要及时地把指针置为NULL。宏体用 do { ... } while(0) 包裹,避免在 if/else 语句中使用时出现编译错误。
注意:上面的代码包括了delete, delete[], 因此是段 C++代码。C的话只要第一个宏即可。