Managed C++에서 new 사용시 에러수정

메모리 사용을 추적하기 위해 MFC는 new 연산자가 MFC의 디버그 버전에 사용될 때 new 연산자를 다시 정의합니다. new 연산자를 다시 정의하므로 관리되는 클래스의 인스턴스를 MFC 응용 프로그램에서 만들면 오류가 발생할 수 있습니다. 이런 현상은 일반적으로 기존 MFC 코드를 공용 언어 런타임에 포팅할 때 발생합니다. 릴리스 빌드의 경우, MFC에서 new 연산자를 다시 정의하지 않으므로 이 오류는 발생하지 않습니다.

다음 예제에서는 .cpp 파일에 있는 관리되는 코드가 String 클래스의 인스턴스를 만듭니다. 이렇게 하면 MFC 응용 프로그램의 디버그 버전에서 컴파일할 때 C3828 컴파일러 오류가 발생합니다.

#using <mscorlib.dll>
using namespace System;

// MFC code

String* s;
s = new String(“Hello world!”);
이런 오류가 발생하지 않게 하려면 관리되는 형식의 인스턴스를 만들기 전에 #undef 및 push_macro 지시문을 사용하여 new 연산자의 정의를 임시로 해제하십시오. 관리되는 코드의 마지막 행 뒤에 pop_macro를 사용하여 new 연산자의 이전 정의를 복원하십시오.

#pragma push_macro(“new”)
#undef new

String* s;
s = new String(“Hello world!”);
#pragma pop_macro(“new”)

출처 – MSDN –

답글 남기기

이메일 주소는 공개되지 않습니다.