重载new(size_t,const char* pfile,int nline)之后,无法使用placement new了!

时间:2022-12-21 17:06:07
为了方便调试,重载了new  操作符:

void* operator new(size_t st,const char* pfile,int nline)
#define new new(__FILE__,__LINE__)

但是使用placement new 时,如:new(pmem)Obj(),编译就报错error C2061: 语法错误“pmem”。

大大们,这个问题如何解决?

8 个解决方案

#1


#undef new

#2


什么意思啊, 我就是要#define new 来调用重载的nerw函数,#undef的功能不是就取消了作用吗?

你回答也太不专业了

#3


写成 new Obj()就可以了

#4


关键词 重复定义,系统无法辨识

你重载 new,又重命名new,系统认为哪个才是你希望的?

#5


#pragma push_macro("new")
#undef new
  ::new( (void*)( pNewData + m_nSize + i ) ) TYPE;
#pragma pop_macro("new")

借鉴CArray的实现方式,应该可以解决你的问题!

#6


new(pmem)Obj(),因为你这用的不是调试版本的placement new 所以taodm建议你#undef new 

#7


只有这样用吗?郁闷了啥,代码有点麻烦了

#8


不要这么不专业地使用placement new的方式来检测内存方面问题,基本就是一个玩具而已。

#1


#undef new

#2


什么意思啊, 我就是要#define new 来调用重载的nerw函数,#undef的功能不是就取消了作用吗?

你回答也太不专业了

#3


写成 new Obj()就可以了

#4


关键词 重复定义,系统无法辨识

你重载 new,又重命名new,系统认为哪个才是你希望的?

#5


#pragma push_macro("new")
#undef new
  ::new( (void*)( pNewData + m_nSize + i ) ) TYPE;
#pragma pop_macro("new")

借鉴CArray的实现方式,应该可以解决你的问题!

#6


new(pmem)Obj(),因为你这用的不是调试版本的placement new 所以taodm建议你#undef new 

#7


只有这样用吗?郁闷了啥,代码有点麻烦了

#8


不要这么不专业地使用placement new的方式来检测内存方面问题,基本就是一个玩具而已。