공용 형식 시스템의 포인터

업데이트: 2007년 11월

포인터는 특수한 종류의 변수입니다. 런타임에서는 관리되는 포인터, 관리되지 않는 포인터 및 관리되지 않는 함수 포인터 등 세 가지 포인터를 지원합니다.

관리되는 힙의 개체에 대한 핸들이라고도 하는 관리되는 포인터는 관리되는 응용 프로그램에서 사용할 수 있는 새로운 형식의 포인터입니다. 관리되는 포인터는 공용 언어 런타임 힙에 있는 관리되는 메모리 블록에 대한 참조이며 이 힙에서 자동 가비지 수집이 수행됩니다. 관리되는 포인터는 참조로 전달되는 메서드 인수를 위해 생성됩니다. 일부 언어에서는 다른 방법으로 관리되는 포인터를 생성할 수 있습니다. 관리되는 포인터만이 CLS 규격입니다.

참고:

Visual C++ 2002와 Visual C++ 2003에서는 __gc *를 사용하여 관리되는 포인터를 선언했습니다. Visual C++ 2005에서는 __gc *가 ArrayList^ al = gcnew ArrayList();에서와 같이 ^로 바뀌었습니다.

관리되지 않는 포인터는 표준 C++ 힙에 있는 관리되지 않는 메모리 블록을 가리키는 기존의 C++ 포인터입니다. 관리되지 않는 포인터는 CLS(공용 언어 사양)의 일부가 아니므로 언어에 따라서는 이 형식을 정의하거나 액세스하는 구문을 제공하지 않을 수도 있습니다. 관리되지 않는 포인터의 지원에 대한 내용은 해당 언어의 설명서를 참조하십시오.

관리되지 않는 함수 포인터는 함수의 주소를 참조하는 기존의 C++ 포인터라고도 할 수 있습니다. CLS에서는 관리되지 않는 함수 포인터 대신 관리되는 대리자를 제공합니다.

포인터 형식을 명시적으로 정의할 필요는 없습니다. 포인터의 형식을 결정하는 데 필요한 모든 정보가 포인터를 선언할 때 제공됩니다.

포인터 형식은 참조 형식인 데 반해 포인터 형식의 값은 개체가 아니므로 이 값을 통해 정확한 형식을 알 수 없습니다.

공용 형식 시스템에서는 포인터 형식에 대해 형식이 안전하게 보호되는 두 가지 작업, 즉 포인터가 참조하는 위치에서 값을 로드하고 이곳에 값을 쓰는 작업을 제공합니다. 형식이 안전하게 보호되는 이러한 작업은 CLS 규격입니다.

또한, 공용 형식 시스템에서는 포인터 형식에 대해 바이트 단위로 주소를 계산하는 세 가지 산술 연산, 즉 정수를 포인터에 더하는 연산, 포인터에서 정수를 빼는 연산 및 포인터에서 다른 포인터를 빼는 연산을 제공합니다. 처음 두 산술 연산에서는 원래 포인터와 동일한 형식의 값이 반환됩니다. 이러한 바이트 단위 연산 작업은 CLS 규격입니다.

참고 항목

개념

공용 언어 사양

CLS 규격 코드 작성

기타 리소스

공용 형식 시스템