重载全局new和类的new发生冲突的问题

lsgt 2011-07-27 11:13:40
1 为了检测内存泄漏,重载了DEBUG模式下的全局new:
#define new new(__FILE__,__LINE__)

2 为了使类从内存池中分配内存,且希望其构造函数被调用,因此重载该类的new:
class CA
{
...
static void* operator new(size_t t);
static void operator delete(void* p);
};

这样的话,将造成编译的时候冲突。为解决此问题:
#ifdef new
#undef new
static void* operator new(size_t t);
static void operator delete(void* p);
#endif
可以编译通过,但在DEBUG模式下就检测不到内存泄漏了。

-----------------------------------------------------
有没有好的办法,既可以在DEBUG模式下重载全局new以检测内存泄漏,又可以重载某个类的new以保证从内存池内分配?

...全文
201 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2011-07-27
  • 打赏
  • 举报
回复
定义一个全局的my_new 和 my_delete 函数。
pathuang68 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackyjkchen 的回复:]

我不建议重载new,一般这种需求我会写个函数
[/Quote]

++
pengzhixi 2011-07-27
  • 打赏
  • 举报
回复
你这种要求没可能实现
jackyjkchen 2011-07-27
  • 打赏
  • 举报
回复
我不建议重载new,一般这种需求我会写个函数
nightkids_008 2011-07-27
  • 打赏
  • 举报
回复
#define DEBUG
healer_kx 2011-07-27
  • 打赏
  • 举报
回复
你看这篇文章,看看它是怎么弄的。
http://www.cnblogs.com/juncheng/archive/2009/11/12/1602165.html
zhengjiankang 2011-07-27
  • 打赏
  • 举报
回复
好好的CRTDBG不用。非要自己写。那你就写吧。
至善者善之敌 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]
你看这篇文章,看看它是怎么弄的。
http://www.cnblogs.com/juncheng/archive/2009/11/12/1602165.html
[/Quote]

这个也只是重载全局的。。象楼上说的,能不能换个名字!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧