一个C++的内存池和内存管理的实现(五)

本文讨论了在C++内存池实现中过度使用delete可能导致的问题,提出通过定义NEW、DELETE及DELETE_ARRAY宏来管理内存,以避免与其他代码的new、delete混淆,并确保正确释放内存,尤其是对于有析构函数的类数组的处理。后续章节将涉及内存泄露的检测功能。
摘要由CSDN通过智能技术生成

前面我们实现的这个内存池使用起来,可能会遇到不少问题。比如,某同学申请内存的时候,用的是

whatever *p = new whatever;

或者其他的,而不是

whatever *p = new(__LINE__, FILE_NAME) whatever;

结果这块内存仍旧走的是系统,但是释放的时候却调用的内存池的释放函数,这就是崩的节奏啊。还有,像微软MFC里的AfxMem.cpp和AfxMem.h里也有new和delete的placement,会不会冲突?打开看看,有一大堆。还好还好,我们的new还是有区别的,行号在文件名的前面,是第二个参数。微软的是反过来的。

太不保险了吧!别人如果也overload了相同参数的new,编译都会通不过。而且你又怎么能保证别人的new会走到你的内存池里?还是别霸占delete了,给人给己留条活路吧!

所以我们还是得改一下,不要overload delete函数。让我们定义三个宏

#define NEW new(__LINE__, FILE_NAME)
#define DEL_PTR(p) { DestructP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值