使用PEOPLE和操作员新覆盖

时间:2014-09-04 17:11:26

标签: visual-c++ ppl

我有一个大型(百万行)VC ++项目,并希望在项目中开始使用PPL(并行模式库)。该项目实现了自定义全局运算符new和operator delete函数。问题是PPL(在调试版本中)使用自己的

void * operator new [](size_t cb,int nBlockUse,const char * szFileName,int nLine)

但是当它取消分配时,我的操作符delete(void *)被调用,并且因为内存布局完全不同,所以这不起作用。

我的问题是,是否有办法在调试版本中使用PPL而不放弃我的全局new和delete运算符。有充分理由拥有这些全球新的&删除覆盖,从我的项目中删除它们不是一个选项。

1 个答案:

答案 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);
}