Share via


Managed Extensions for C++ 구문 업그레이드 검사 목록

업데이트: 2007년 11월

Visual C++ 2005의 경우 Visual C++에는 가비지 수집을 사용하는 .NET Framework 등의 가상 컴퓨터를 대상으로 하는 기능이 포함되었습니다. Visual C++ 2008에서는 C++의 Managed Extensions를 지원하지 않으며 이후 릴리스에서는 완전히 제거될 예정입니다.

Managed Extensions for C++를 사용하는 코드는 /clr:oldSyntax를 사용하여 계속 컴파일할 수 있습니다. 자세한 내용은 /clr(공용 언어 런타임 컴파일)를 참조하십시오. 새 구문을 사용하는 방법에 대한 자세한 내용은 다음 항목을 참조하십시오.

이 항목에서는 Managed Extensions for C++와 새로운 Visual C++ 구문 사이의 차이점에 대해 설명합니다.

Managed Extensions for C++ 코드를 업데이트하려면

  • #using <mscorlib.dll>을 제거합니다. 이 어셈블리는 이제 기본적으로 참조됩니다.

  • __gc class를 ref class로 바꿉니다.

  • __gc struct를 ref struct로 바꿉니다.

  • __value class를 value class로 바꿉니다.

  • __value struct를 value struct로 바꿉니다.

  • 값 클래스에서 기본 생성자를 제거합니다. Managed Extensions for C++에서는 값 형식에 대한 기본 생성자를 사용할 수 있었지만 CLR의 특성상 이를 안전하게 호출할 수 없으므로 이 기능은 이제 사용되지 않습니다.

참조 형식과 값 형식에 대한 자세한 내용은 Classes and Structs (Managed)를 참조하십시오.

  • __gc __interface를 interface class로 바꿉니다.

인터페이스 키워드에 대한 자세한 내용은 interface class를 참조하십시오.

  • __abstract를 abstract로 바꾸어 클래스 이름 뒤로 옮깁니다. 자세한 내용은 abstract (C++)을 참조하십시오.

  • __sealed를 sealed로 바꾸어 클래스 이름 뒤로 옮깁니다. 자세한 내용은 sealed를 참조하십시오.

  • __propertyproperty로 바꾸고 get 및 set 메서드를 단일 속성 블록으로 결합한 다음 underbar/name 후행 접미사를 이러한 접근자에서 제거합니다. 단순 속성의 경우 접근자를 명시적으로 정의할 필요가 없습니다. 인덱싱된 속성의 구문에서 속성 형식 뒤에는 대괄호 쌍을 사용해야 합니다. 자세한 내용은 How to: Use Simple PropertiesHow to: Use Indexed Properties를 참조하십시오.

  • __eventevent (C++)로 바꿉니다.

  • __value enum을 enum class로 바꿉니다.

  • __gc*에 정의된 참조 형식에 대한 포인터를 ^ 기호로 바꿉니다. 자세한 내용은 ^ (Handle to Object on Managed Heap)을 참조하십시오.

  • 가비지 수집된 힙에 존재할 수 있는 값 형식에 대한 포인터를 interior_ptr로 바꿉니다.

  • 전체 개체를 고정하지 않은 경우 __pin을 사용하여 선언한 포인터를 pin_ptr로 바꿉니다. 전체 개체를 고정한 경우에는 interior_ptr를 사용한 다음 내부 포인터에 대해 pin_ptr를 사용합니다. Visual C++ 2005의 경우 이 템플릿은 cli Namespace에 정의되어 있습니다.

  • new를 gcnew로 바꿉니다.

  • 포인터와 핸들을 검사하기 위해 비교를 사용하는 경우 및 가비지 수집된 힙에 대한 포인터나 핸들이 개체를 가리키지 않음을 나타내는 데 사용되는 0 또는 null을 nullptr로 바꿉니다.

  • __gc[]를 사용하여 선언한 가비지 수집된 배열을 업데이트하여 array 형식을 사용하도록 만듭니다. Visual C++ 2005의 경우 이 템플릿은 cli Namespace에 정의되어 있습니다.

  • __box의 인스턴스를 모두 제거합니다. 자세한 내용은 Implicit Boxing을 참조하십시오.

  • 문자열 리터럴에서 "S" 접두사를 제거합니다. 컴파일러는 이제 문자열이 사용되는 컨텍스트를 기반으로 문자열이 리터럴인지 여부를 확인합니다.

  • op_Addition, op_Subtraction 등과 같이 Managed Extensions for C++에 필요한 오버로드된 연산자에 대한 명시적 선언과 사용을 일반적인 C++ 구문으로 바꿉니다. 자세한 내용은 User-Defined OperatorsOperator Overloading을 참조하십시오.

  • Managed Extensions for C++ 구문에서 op_Implicit 및 op_Explicit을 사용하는 비교 연산자를 업데이트합니다. 자세한 내용은 User-Defined Conversions를 참조하십시오.

  • __typeoftypeid로 바꿉니다.

  • __try_castsafe_cast로 바꿉니다. Visual C++ 2005의 경우 이 템플릿은 cli Namespace에 정의되어 있습니다.

  • CLR의 어셈블리 서명 특성을 사용하여 어셈블리에 서명(어셈블리에 강력한 이름 부여)하는 경우 코드에서 이들 특성을 제거하고 어셈블리 서명 링커 옵션을 대신 사용해야 합니다. 자세한 내용은 강력한 이름 어셈블리(어셈블리 서명)를 참조하십시오.

참고 항목

개념

혼합형(네이티브 및 관리) 어셈블리

New C++ Language Features