追蹤參考運算子 (C++ 元件擴充功能)

追蹤參考 (%) 的行為就像一般 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
    }
}

Common Language Runtime

將繫結至 CLR 型別的物件在記憶體回收堆積上時,便可使用來處理的追蹤參考。

在 CLR,追蹤參考變數的值會自動更新,當記憶體回收行程移動參考的物件。

對於物件的原生 C++ 參考在記憶體回收堆積是不可能的。

如需以 C++/CLI 的追蹤參考的詳細資訊,請參閱:

8903062a.collapse_all(zh-tw,VS.110).gif範例

範例

下列範例顯示如何使用與原生的追蹤參考和 Managed 型別。

// 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