chenjun840168660 2015-12-31 09:41 采纳率: 0%
浏览 2039
已结题

宏替换区分new、new(nothrow)和new placement

目前正在写一个内存泄漏检测的项目,通过重载new和delete的方式实现,重载的new记录了内存申请操作的文件名和行号,重载形式为 operator new(int size ,char*file,int line);

  • 为了使被检测代码使用new的地方调用我们重载版本的new ,需要对被检测的源代码进行宏替换 #define new new(__FILE,__LINE) ; 但是这会引起新的问题,因为有些被检测代码中存在 new(nothrow) 和 new(A,Point*B)(A为一个自定义类型,B指向已经申请了的一片内存空间) ;*宏替换会将new的这两种用法也替换掉 形成 new(__FILE,__LINE) (nothrow)和new(__FILE,__LINE) (A,Point*B) 的形式,*这对于g++编译器是编译通不过的,而且new的这两种用法又无法重载,不知有大神遇到过类似的问题吗,或是有比较好的方法能够比较智能的实现替换,后面两种new的使用不进行宏替换,只进行普通new的替换 。

期待大神解答,急求,急求 !!

  • 写回答

1条回答 默认 最新

  • devmiao 2015-12-31 14:34
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备