问题描述
- 宏替换区分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的替换 。
期待大神解答,急求,急求 !!
- 为了使被检测代码使用new的地方调用我们重载版本的new ,需要对被检测的源代码进行宏替换 #define new new(__FILE,__LINE) ; 但是这会引起新的问题,因为有些被检测代码中存在
解决方案
http://www.cnblogs.com/xuxm2007/archive/2011/12/14/2288185.html
解决方案二:
C++ new 和Placement New 以及nothrow new
C++中的new和Placement New 以及nothrow new
new、nothrow new和placement new 原理分析
时间: 2024-11-08 19:15:25