Poradnik: Deklarowanie typów wartości za pomocą słowa kluczowego interior_ptr (C++/CLI)
Można użyć interior_ptr z typem wartości.
Ważne
Ta funkcja języka jest obsługiwana /clr
przez opcję kompilatora, ale nie przez opcję kompilatora /ZW
.
Przykład: interior_ptr z typem wartości
opis
W poniższym przykładzie języka C++/CLI pokazano, jak używać interior_ptr z typem wartości.
Kod
// interior_ptr_value_types.cpp
// compile with: /clr
value struct V {
V(int i) : data(i){}
int data;
};
int main() {
V v(1);
System::Console::WriteLine(v.data);
// pointing to a value type
interior_ptr<V> pv = &v;
pv->data = 2;
System::Console::WriteLine(v.data);
System::Console::WriteLine(pv->data);
// pointing into a value type
interior_ptr<int> pi = &v.data;
*pi = 3;
System::Console::WriteLine(*pi);
System::Console::WriteLine(v.data);
System::Console::WriteLine(pv->data);
}
1
2
2
3
3
3
Przykład: this
wskaźnik
opis
W typie this
wartości wskaźnik oblicza interior_ptr.
W treści niestacjonanej funkcji składowej typu V
wartości jest wyrażeniem typuinterior_ptr<V>
, this
którego wartość jest adresem obiektu, dla którego wywoływana jest funkcja.
Kod
// interior_ptr_value_types_this.cpp
// compile with: /clr /LD
value struct V {
int data;
void f() {
interior_ptr<V> pv1 = this;
// V* pv2 = this; error
}
};
Przykład: operator address-of
opis
W poniższym przykładzie pokazano, jak używać operatora address-of z statycznymi elementami członkowskimi.
Adres statycznego elementu członkowskiego typu Visual C++ zwraca wskaźnik natywny. Adres elementu członkowskiego typu wartości statycznej jest wskaźnikiem zarządzanym, ponieważ element członkowski typu wartości jest przydzielany na stercie środowiska uruchomieniowego i może zostać przeniesiony przez moduł odśmieceń pamięci.
Kod
// interior_ptr_value_static.cpp
// compile with: /clr
using namespace System;
value struct V { int i; };
ref struct G {
static V v = {22};
static int i = 23;
static String^ pS = "hello";
};
int main() {
interior_ptr<int> p1 = &G::v.i;
Console::WriteLine(*p1);
interior_ptr<int> p2 = &G::i;
Console::WriteLine(*p2);
interior_ptr<String^> p3 = &G::pS;
Console::WriteLine(*p3);
}
22
23
hello
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla