Procedura: dichiarare i tipi di valori con la parola chiave interior_ptr (C++/CLI)
Un oggetto interior_ptr può essere usato con un tipo valore.
Importante
Questa funzionalità del linguaggio è supportata dall'opzione del compilatore /clr
, ma non dall'opzione del compilatore /ZW
.
Esempio: interior_ptr con tipo valore
Descrizione
L'esempio C++/CLI seguente mostra come usare un oggetto interior_ptr con un tipo valore.
Codice
// 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
Esempio: this
puntatore
Descrizione
In un tipo valore, il this
puntatore restituisce un interior_ptr.
Nel corpo di una funzione membro non statica di un tipo V
valore è this
un'espressione di tipo interior_ptr<V>
il cui valore è l'indirizzo dell'oggetto per cui viene chiamata la funzione.
Codice
// 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
}
};
Esempio: operatore address-of
Descrizione
Nell'esempio seguente viene illustrato come utilizzare l'operatore address-of con membri statici.
Tramite l'indirizzo di un membro di tipo Visual C++ statico viene generato un puntatore nativo. L'indirizzo di un membro statico del tipo di valore è un puntatore gestito poiché il membro del tipo di valore viene allocato nell'heap di runtime e può essere spostato dal Garbage Collector.
Codice
// 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
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per