重载new和delete方法实现C++内存安全

    C++使用new关键字创建的对象,被分配到堆内存空间,然后得到对象地址,当程序复杂庞大时容易发生访问地址bug或内存泄露bug。为了避免内存泄露并在调试程序时找到内存泄露的bug,可以重载newdelete函数,确保程序的内存安全。

    newdelete关键字都可以作为operator来重载。重载的new函数规定一个参数size_t表示需要在堆空间上分配的内存大小,可以认为等于sizeof得到的大小,这个数值由系统创建对象时传递来。一般的实现方法就是:

#include <stdlib.h>
void* operator new(const size_t type_size)
{
  return malloc(type_size);
}

    重载的delete函数规定一个参数void*表示要删除的对象地址,一般的实现方法就是:

#include <stdlib.h>
void operator delete(void* obj_ptr)
{
    free(obj_ptr);
}

    在这两个函数里加入一些调试代码,监视对象的创建和删除的次数是否对应,就能比较容易发现哪些对象发生了内存泄露,这样就容易找到bug位置。在函数堆栈上按值创建的对象则无需关心,而且在函数堆栈上创建和删除对象也不会调用newdelete函数这个方法仅限于C++面向对象编程,如果程序分配内存是直接使用C语言运行库函数(malloc()之类),则需要其它方法,比如CrtDbg里的调试函数。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值