2014-09-04 3 views
0

У меня есть проект с большим (миллионным) VC++ и хотел бы начать использовать PPL (Parallel Patterns Library) в рамках проекта. В проекте реализованы пользовательские глобальные операторы нового и операторские функции удаления. Проблема заключается в том, что PPL (в отладочных) использует свой собственныйИспользование PPL с новым переопределением оператора

аннулируются * Оператор новый [] (size_t Cb, INT nBlockUse, Const символ * szFileName, внутр nLine)

, но затем, когда он де-выделяет , мой оператор delete (void *) получает вызов, и поскольку макет памяти полностью отличается, это не работает.

Мой вопрос в том, есть ли способ использовать PPL в отладочной сборке, не отказываясь от моих глобальных новых и удаленных операторов. Есть веские причины для того, чтобы эти глобальные новые & исключить переопределения, и удаление их из моего проекта в данный момент не является вариантом.

ответ

1

Это была ошибка в PPL в Visual C++ 2010; она была установлена ​​в Visual C++ 2012.

Вы можете быть в состоянии работать вокруг этого, написав свои собственные операторы замены отлаживать новые и удалять которые называют свои собственные операторы новые и удалять:

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); 
} 
+0

К сожалению, я должен упомянул, что я использую VS2013. При попытке переопределить недействительный * __cdecl оператор новый [] ( size_t сопзИте размер, INT Const block_use, символ сопза * имя_файл, INT Const line_number ) компоновщик сообщает LIBCMTD. lib (dbgnew.obj): ошибка LNK2005: «void * __cdecl operator new [] (unsigned __int64, int, char const *, int)» (?? _ U @ YAPEAX_KHPEBDH @ Z), уже определенный в UDMemory.obj The/FORCE: MULTIPLE linker также не решает проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^