最近在完善当前项目指针自动管理释放的问题,尽量避免代码里面任何一个退出的地方都要亲笔写一遍释放,以后谁不小心加了个return就变成内存泄露了,所以类似智能指针的做法来自动管理指针,释放资源。
malloc指针的自动管理代码:
class _AutoFree{
void *pt;
private:
void operator=(const _AutoFree& _at){};
public:
_AutoFree(void* _pt):pt(_pt){}
~_AutoFree(){_check_pointer_malloc(pt);};
};
#define _pt_auto_free(pt) \
_AutoFree _af(pt);
使用:
char *buf = (char*)malloc(1024);
_pt_auto_free(_buf);
如果这样写,局限性在哪里?如果在同一个scope里面有另一个buf1也需要自动管理你? 发生命名冲突啦,想想法子解决!
改善:
#define _pt_auto_free2(pt, ...) \
_AutoFree _arg##__VA_ARGS__(pt);
#define _pt_auto_free(pt) _pt_auto_free2(pt, __LINE__)
char *buf = (char*)malloc(1024);
ch