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

本文介绍了如何在C++中通过类 `_AutoFree` 和宏定义实现malloc分配内存后的智能指针管理,以防止内存泄漏。通过预处理宏避免命名冲突,并讨论了在不同场景下如何灵活应用此机制,包括处理已有的指针变量和条件性内存分配的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值