추적 참조 연산자(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를 참조 하십시오.
예제
예제
다음 샘플에서는 네이티브 및 관리 되는 형식을 추적 참조를 사용 하는 방법을 보여 줍니다.
// 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