我有一个大型(百万行)VC ++项目,并希望在项目中开始使用PPL(并行模式库)。该项目实现了自定义全局运算符new和operator delete函数。问题是PPL(在调试版本中)使用自己的
void * operator new [](size_t cb,int nBlockUse,const char * szFileName,int nLine)
但是当它取消分配时,我的操作符delete(void *)被调用,并且因为内存布局完全不同,所以这不起作用。
我的问题是,是否有办法在调试版本中使用PPL而不放弃我的全局new和delete运算符。有充分理由拥有这些全球新的&删除覆盖,从我的项目中删除它们不是一个选项。
答案 0 :(得分:1)
这是Visual C ++ 2010中PPL中的一个错误;它已在Visual C ++ 2012中修复。
您可以通过编写自己的替换调试操作符new来解决此问题,并删除调用您自己的自定义操作符new并删除:
void __cdecl operator delete(
void* block,
int const block_use,
char const* file_name,
int const line_number
)
{
return operator delete(block);
}
void __cdecl operator delete[](
void* block,
int const block_use,
char const* file_name,
int const line_number
)
{
return operator delete[](block);
}
void* __cdecl operator new(
size_t const size,
int const block_use,
char const* file_name,
int const line_number
)
{
return operator new(size);
}
void* __cdecl operator new[](
size_t const size,
int const block_use,
char const* file_name,
int const line_number
)
{
return operator new[](size);
}