Aracılığıyla paylaş


İzleme Başvurusu İşleci (C++ Bileşen Uzantıları)

A Başvuru izleme (%) sıradan bir C++ başvurusu gibi davranır (&) bir nesne izleme başvurusu ne zaman atanan dışında nesnenin başvuru sayısı artırılır.

Tüm platformlar

İzleme başvurusu aşağıdaki özelliklere sahiptir.

  • Atama için izleme başvurusu bir nesnenin nesne başvuru sayısı 'er neden olur.

  • Yerel bir başvuru (&), başvuru sonucu ise bir *.İzleme başvurusu (%) başvuru, sonuç ise bir ^.Arasındaki tek fark & ve % olduğu yeri & "ham" başvurusu % olan başvuru sayılan başvuru.Bir nesneye bir % sahip olduğu sürece, nesne Canlı bellekte kalır.

  • Nokta (.) işleci üyesi access nesnesinin bir üyesi erişmek için kullanılır.

  • Yığın üzerinde izleme başvurusu bildirilebilir.İzleme başvurusu, bir sınıf üyesi olamaz.

  • Değer türleri ve tanıtıcılar için geçerli izleme başvuruları (örneğin String^).

  • İzleme başvurusu boş değer atanamaz veya nullptr değeri.İzleme başvurusu gerekli sayıda geçerli başka bir nesneye atanabilir.

  • İzleme başvurusu alma adresi tek işlem işleci kullanılamaz.

Windows Çalışma Zamanı

İzleme başvurusu, bir referans olarak sayılan standart C++ başvurusu gibi davranır.C++ başvurular hakkında daha fazla bilgi için bkz: Başvurular (C++).

Aşağıdaki örnek, izleme başvurusu için gösterdiği nesnenin içeriğini değiştirmek için nasıl kullanılacağını gösterir.

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

Ortak Dil Çalışma Zamanı

clr türü atık olarak toplanmış öbek üzerindeki bir nesneye bağlamak için bir tanıtıcı izleme başvurusu kullanabilirsiniz.

clr değeri içinde başvurulan nesne Çöp toplayıcı taşır her izleme başvurusu değişkeni otomatik olarak güncelleştirilir.

Bir nesneyi yerel bir C++ başvuru atık toplanan yığında olmasını mümkün değildir.

c + başvuru izleme hakkında daha fazla bilgi için +/ CLI, bkz:

8903062a.collapse_all(tr-tr,VS.110).gifÖrnekler

Örnek

Aşağıdaki örnek, yerel ve yönetilen türleriyle izleme başvurusu kullanın gösterilmiştir.

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

Örnek

Aşağıdaki örnek, bir dizi izleme başvurusu bağlamak gösterilmiştir.

// 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]);
}

Çıktı