pin_ptr (C++/CLI)
Deklaruje Przypinanie wskaźnik, która jest używana tylko z plików wykonywalnych języka wspólnego.
Wszystkich modułów wykonawczych.
(Nie są żadne uwagi dla tej funkcji języka, stosowane do wszystkich modułów wykonawczych).
Windows Runtime
(Ta funkcja języka nie jest obsługiwana w środowisku wykonawczym Windows.)
Common Language Runtime
A Przypinanie wskaźnik jest wskaźnik wnętrza, uniemożliwiający obiekt wskazywanej przenoszenia na stercie zebrane garbage.Oznacza to, że wartość wskaźnika możliwości przypinania ich nie zostanie zmieniona przez common language runtime.Jest to wymagane, jeśli adres klas zarządzanych do niezarządzanych funkcji tak, że adres nie zmieni nieoczekiwanie podczas rozpoznawania wywołanie funkcji niezarządzanego.
Składnia
[cli::]pin_ptr<cv_qualifier type> var = &initializer;
Parametry
cv_qualifier
constlub volatile kwalifikatorów.Domyślnie jest wskaźnik możliwości przypinania ich volatile.Jest zbędne, ale nie błąd zadeklarować wskaźnika możliwości przypinania ich volatile.Typ
Typ initializer.var
Nazwa pin_ptr zmienna.Inicjator
Członek typ odwołania, element tablicy lub każdego innego obiektu można przypisać do macierzystych wskaźnika.
Uwagi
A pin_ptr stanowi nadzbiór funkcji wskaźnik macierzystym.W związku z tym, wszystko, co może być przypisana do wskaźnika macierzystego można przypisać również do pin_ptr.Wewnętrzne wskaźnik może wykonywać ten sam zestaw operacji jako wskaźniki macierzystym, włączając porównanie i wskaźnik arytmetycznych.
Obiekt lub sub-object klasy zarządzanej można zakotwiczać, w którym to przypadku common language runtime nie przenosi go podczas wyrzucania elementów bezużytecznych.Główne wykorzystania tego jest przekazuje się wskaźnik do danych zarządzanych jako rzeczywisty parametr wywołanie funkcji niezarządzanego.Podczas cyklu zbierania środowiska wykonawczego inspekcji metadanych dla wskaźnika możliwości przypinania ich i nie będzie przenoszony element, który wskazuje.
Przypinanie obiektu przypięcie jej wartości pól; oznacza to, że pola pierwotny lub wartość typu.Jednakże pól zadeklarowanych przez śledzenia uchwytu (%) nie są przypięte.
Przypinanie sub-object, zdefiniowany w zarządzanym obiektem skutkuje przypinanie całego obiektu.
Jeśli wskaźnik możliwości przypinania ich zostanie przypisany do wskaż nową wartość, poprzednie wystąpienie wskazywanego nie już uważany za unieruchomiony.
Obiekt jest zakotwiczony, tylko podczas pin_ptr wskaże go.Obiekt jest zakotwiczony, już podczas jego możliwości przypinania ich wskaźnik wykracza poza zakres lub jest ustawiona na nullptr.Po pin_ptr elektrotechnicznych blach teksturowanych zakres, obiekt, który został przypięte mogą być przenoszone na stercie przez garbage collector.Macierzysty wskaźniki, które nadal wskaż obiekt nie zostanie zaktualizowana i de-referencing, jeden z nich może podnieść wyjątek nieodwracalny.
Jeśli żadne wskaźniki możliwości przypinania ich wskaż obiekt (wszystkie wskaźniki możliwości przypinania ich przekroczyła zakres, zostały przypisane do pkt do innych obiektów lub zostały przypisane nullptr), obiekt jest gwarantowane, że nie zostać unieruchomiony.
Wskaźnik możliwości przypinania ich można wskaż uchwyt odniesienia wartość typu lub typu boxed uchwyt, członka typu zarządzanego lub element tablicy.Nie można wskazać typ odwołania.
Biorąc pod adresem pin_ptr że punktów do obiektu macierzystego powoduje zachowanie niezdefiniowany.
Możliwości przypinania ich wskaźniki mogą być deklarowane jako zmienne lokalne-statycznej na stosie.
Nie można użyć wskaźników możliwości przypinania ich jako:
Parametry funkcji
zwracany typ funkcji
Członek klasy
Typ docelowy rzutowania.
pin_ptrw cli obszaru nazw.Aby uzyskać więcej informacji, zobacz Przestrzeń nazw platformy, domyślna i cli (C++ Component Extensions).
Aby uzyskać więcej informacji na temat wewnętrznych wskaźniki zobacz interior_ptr (C++/CLI).
Aby uzyskać więcej informacji na temat przypinanie wskaźniki, zobacz Jak: wskaźniki Pin i tablic i Jak: zadeklarować przypinanie wskaźniki i typów wartości.
Wymagania
Opcja kompilatora:/clr
Przykłady
Przykład
W poniższym przykładzie użyto pin_ptr Aby ograniczyć położenie pierwszego elementu tablicy.
// pin_ptr_1.cpp
// compile with: /clr
using namespace System;
#define SIZE 10
#pragma unmanaged
// native function that initializes an array
void native_function(int* p) {
for(int i = 0 ; i < 10 ; i++)
p[i] = i;
}
#pragma managed
public ref class A {
private:
array<int>^ arr; // CLR integer array
public:
A() {
arr = gcnew array<int>(SIZE);
}
void load() {
pin_ptr<int> p = &arr[0]; // pin pointer to first element in arr
int* np = p; // pointer to the first element in arr
native_function(np); // pass pointer to native function
}
int sum() {
int total = 0;
for (int i = 0 ; i < SIZE ; i++)
total += arr[i];
return total;
}
};
int main() {
A^ a = gcnew A;
a->load(); // initialize managed array using the native function
Console::WriteLine(a->sum());
}
Dane wyjściowe
Przykład
Poniższy przykład pokazuje że wnętrza wskaźnik mogą być konwertowane na możliwości przypinania ich wskaźnik, i że zwrot wpisz adres z operatora (&) jest wnętrza wskaźnika, gdy argument jest na zarządzanego stosu.
// pin_ptr_2.cpp
// compile with: /clr
using namespace System;
ref struct G {
G() : i(1) {}
int i;
};
ref struct H {
H() : j(2) {}
int j;
};
int main() {
G ^ g = gcnew G; // g is a whole reference object pointer
H ^ h = gcnew H;
interior_ptr<int> l = &(g->i); // l is interior pointer
pin_ptr<int> k = &(h->j); // k is a pinning interior pointer
k = l; // ok
Console::WriteLine(*k);
};
Dane wyjściowe
Przykład
Poniższy przykład pokazuje, że wskaźnik możliwości przypinania ich można rzutować na innego typu.
// pin_ptr_3.cpp
// compile with: /clr
using namespace System;
ref class ManagedType {
public:
int i;
};
int main() {
ManagedType ^mt = gcnew ManagedType;
pin_ptr< int > pt = &mt->i;
*pt = 8;
Console::WriteLine(mt->i);
char *pc = ( char* ) pt;
*pc = 255;
Console::WriteLine(mt->i);
}
Dane wyjściowe