c++如何自动生成变量名

来源:互联网 发布:淘宝云客服平台 编辑:程序博客网 时间:2024/05/17 08:31

最近在完善当前项目指针自动管理释放的问题,尽量避免代码里面任何一个退出的地方都要亲笔写一遍释放,以后谁不小心加了个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);

char *buf2 = (char*)malloc(1024);

_pt_auto_free(_buf);

_pt_auto_free(_buf2);

编译打开预处理文件,会发现生成类似这样的代码:

_AutoFree _arg784(_buf);;
_AutoFree _arg785(_buf);;


上面是在指针生产后所使用的,那如果你拿到一个指针变量后,有可能在下文的某些位置某些条件下申请内存,比如:

char *buf = NULL;

_pt_auto_free(_buf); //肯定不适合!

这样的话,如果不关心下文的代码逻辑,能做智能指针管理呢? 可以的,比如:

_ppt_auto_free(&_buf); 指针的指针,明白了吗?


OVER.


0 0
原创粉丝点击