2014-09-04 4 views
0

나는 커다란 (백만 줄) VC++ 프로젝트를 가지고 있으며 프로젝트 내에서 PPL (Parallel Patterns Library)을 사용하기를 원합니다. 이 프로젝트는 사용자 정의 전역 연산자 new 및 연산자 delete 함수를 구현합니다. 문제 (디버그 빌드) PPL은 (size_t와 CB를, CONST CHAR * szFileName, INT의 nLine nBlockUse를 INT) 자체연산자를 사용하여 PPL 사용하기 새로 바꾸기

공극 * 연산자 새로운 []를 사용

그런데 그것을 역 할당하는 것이다 , 내 연산자 delete (void *)가 호출되고 메모리 레이아웃이 완전히 다르므로이 방법이 작동하지 않습니다.

제 질문은 전역 새 및 삭제 연산자를 버리지 않고 디버그 빌드에서 PPL을 사용하는 방법이 있는지 여부입니다. 이 글로벌 새로운 & 삭제 우선 적용이 필요한 좋은 이유가 있습니다. 현재이 옵션을 내 프로젝트에서 제거 할 수 없습니다.

답변

1

이것은 Visual C++ 2010의 PPL 버그입니다. 이 비주얼 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 조작자가 새로운 [( 가 CONST 크기 size_t가, INT의 CONST의 block_use가 숯 CONST *이 file_name은, LINE_NUMBER INT의 CONST)이 링커 LIBCMTD보고 재정의 할 때. lib (dbgnew.obj) : 오류 LNK2005 : UDMemory.obj에 이미 정의 된 "void * __cdecl 연산자 new [] (부호없는 __int64, int, char const *, int)"(?? _ U @ YAPEAX_KHPEBDH @ Z) /FORCE : 다중 링커 옵션으로도 문제가 해결되지 않습니다. –