İzleme Başvurusu İşleci (C++/CLI ve C++/CX)

İzleme başvurusu (%), bir nesne izleme başvurusuna atandığında nesnenin başvuru sayısının artırılmış olması dışında normal bir C++ başvurusu (&) gibi davranır.

Tüm Platformlar

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

  • Bir nesnenin izleme başvurusuna atanmış olması, nesnenin başvuru sayısının artırılabilmesine neden olur.

  • Yerel başvuru (&), başvuruyu kaldırdığınızda elde edilen *sonuç olur. bir başvuruyu kaldırdığınızda ^bir izleme başvurusu (%) sonucudur. Bir nesneye sahip % olduğunuz sürece, nesne bellekte canlı kalır.

  • Nokta (.) üye erişim işleci nesnenin bir üyesine erişmek için kullanılır.

  • İzleme başvuruları, değer türleri ve tanıtıcılar (örneğin String^) için geçerlidir.

  • İzleme başvurusuna null veya nullptr değer atanamaz. İzleme başvurusu, başka bir geçerli nesneye gerektiği kadar çok kez yeniden atanabilir.

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

Windows Çalışma Zamanı

İzleme başvurusu, standart bir C++ başvurusu gibi davranır, ancak % başvurusu sayılır. Aşağıdaki kod parçacığı , % ile ^ türleri arasında dönüştürme işlemini gösterir:

Foo^ spFoo = ref new Foo();
Foo% srFoo = *spFoo;
Foo^ spFoo2 = %srFoo;

Aşağıdaki örnekte , % alan bir işleve ^ geçirme işlemi gösterilmektedir.

ref class Foo sealed {};

    // internal or private
    void UseFooHelper(Foo% f)
    {
        auto x = %f;
    }

    // public method on ABI boundary
    void UseFoo(Foo^ f)
    {
        if (f != nullptr) { UseFooHelper(*f); }
    }

Ortak Dil Çalışma Zamanı

C++/CLI'da, çöp toplanan yığında CLR türündeki bir nesneye bağlandığınızda bir tanıtıcıya izleme başvurusu kullanabilirsiniz.

CLR'de, atık toplayıcı başvurulan nesneyi her taşırken izleme başvuru değişkeninin değeri otomatik olarak güncelleştirilir.

İzleme başvurusu yalnızca yığında bildirilebilir. İzleme başvurusu bir sınıfın üyesi olamaz.

Çöp toplama yığınındaki bir nesneye yerel C++ başvurusu olması mümkün değildir.

C++/CLI'da başvuruları izleme hakkında daha fazla bilgi için bkz:

Örnekler

C++/CLI için aşağıdaki örnek, yerel ve yönetilen türlerle izleme başvurusunun nasıl kullanılacağını gösterir.

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

C++/CLI için aşağıdaki örnekte bir diziye izleme başvurusunun nasıl bağlanacağınız gösterilmektedir.

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