다음을 통해 공유


추적 참조 연산자(C++ 구성 요소 확장)

A 추적 참조 (%)는 일반 C++ 참조 처럼 동작 (&) 개체 추적 참조에 할당 된 경우 제외 하는 개체의 참조 횟수가 증가 합니다.

모든 플랫폼

추적 참조는 다음과 같은 특징이 있습니다.

  • 추적 참조 하는 개체의 할당 개체의 참조 횟수를 증가 됩니다.

  • 네이티브 참조 (&)를 역참조 하는 경우에 발생 한 *.역참조 하는 경우 결과 추적 참조 (%)입니다 여 ^.유일한 차이점 & 및 % 되는 곳 & "원시" 이면 % 참조 계산 참조입니다.개체를 % 다르기만 개체가 살아 남아 있습니다.

  • 점 (.) 멤버 액세스 연산자를 사용 하 여 개체의 멤버에 액세스 합니다.

  • 추적 참조는 스택에 선언할 수 있습니다.추적 참조는 클래스의 멤버를 수 없습니다.

  • 추적 참조는 값 형식과 핸들이 잘못 (예를 들어 String^).

  • 추적 참조의 null 할당할 수 없습니다 또는 nullptr 값입니다.추적 참조 필요한 만큼 다른 유효한 개체를 재할당할 수 있습니다.

  • 추적 참조는 단항 주소를 연산자로 사용할 수 없습니다.

Windows 런타임

추적 참조는 표준 C++ 참조 계산 참조 처럼 동작합니다.C + + 참조에 대 한 내용은 참조 (C++).

다음 예제에서는 추적 참조를 사용 하 여 가리키는 개체의 내용을 수정 하는 방법을 보여 줍니다.

/ZW
using namespace Platform;
int main()
{
array<String^> ^arr = ref new array<String^>(10);
    int i = 0;

    for(int i = 0; i < 10; ++i){ 
        String^& s = arr[i];
        s = i++.ToString(); // changes the array content
    }
}

공용 언어 런타임

가비지 수집 된 힙에서 CLR 형식의 개체에 바인딩하는 경우에 추적 참조에 대 한 핸들을 사용할 수 있습니다.

값은 CLR의 가비지 수집기가 참조 된 개체를 이동할 때마다 추적 참조의 변수를 자동으로 업데이트 됩니다.

네이티브 C++ 개체를 참조 하는 가비지 수집 된 힙에 있을 수 수 없습니다.

C +에 대 한 참조를 추적 하는 방법에 대 한 자세한 내용은 + CLI를 참조 하십시오.

8903062a.collapse_all(ko-kr,VS.110).gif예제

예제

다음 샘플에서는 네이티브 및 관리 되는 형식을 추적 참조를 사용 하는 방법을 보여 줍니다.

// tracking_reference_1.cpp
// compile with: /clr
ref class MyClass {
public:
   int i;
};

value struct MyStruct {
   int k;
};

int main() {
   MyClass ^ x = ref new MyClass;
   MyClass ^% y = x;   // tracking reference handle to reference object 

   int %ti = x->i;   // tracking reference to member of reference type

   int j = 0;
   int %tj = j;   // tracking reference to object on the stack

   int * pi = new int[2];
   int % ti2 = pi[0];   // tracking reference to object on native heap

   int *% tpi = pi;   // tracking reference to native pointer

   MyStruct ^ x2 = ref new MyStruct;
   MyStruct ^% y2 = x2;   // tracking reference to value object

   MyStruct z;
   int %tk = z.k;   // tracking reference to member of value type

   delete[] pi;
}

예제

다음 샘플에서는 추적 참조 하는 배열에 바인딩하는 방법을 보여 줍니다.

// tracking_reference_2.cpp
// compile with: /clr
using namespace System;

int main() {
   array<int> ^ a = ref new array< Int32 >(5);
   a[0] = 21;
   Console::WriteLine(a[0]);
   array<int> ^% arr = a;
   arr[0] = 222;
   Console::WriteLine(a[0]);
}

Output