Condividi tramite


Procedura: dichiarare i tipi di valori con la parola chiave interior_ptr (C++/CLI)

interior_ptr può essere utilizzato con un tipo di valore.

Nota importanteImportante

Questa funzionalità del linguaggio è supportata dall' opzione del compilatore di /clr , ma non dall' opzione del compilatore di /ZW .

Esempio

t19s4hxx.collapse_all(it-it,VS.110).gifDescrizione

In l ' esempio di C++/CLI come utilizzare interior_ptr con un tipo di valore.

t19s4hxx.collapse_all(it-it,VS.110).gifCodice

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

t19s4hxx.collapse_all(it-it,VS.110).gifOutput

1
2
2
3
3
3

Esempio

t19s4hxx.collapse_all(it-it,VS.110).gifDescrizione

In un tipo di valore, il puntatore di this restituisce un interior_ptr.

In il corpo di una funzione membro non statico di un tipo di valore V, this è un'espressione di tipo interior_ptr<V> il cui valore è l'indirizzo dell' oggetto per il quale viene chiamata la funzione.

t19s4hxx.collapse_all(it-it,VS.110).gifCodice

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

t19s4hxx.collapse_all(it-it,VS.110).gifDescrizione

Di seguito viene illustrato come utilizzare l'operatore address-of con membri statici.

L'indirizzo di un membro del tipo di Visual C++ statico genera un puntatore nativo.L'indirizzo di un membro statico del tipo di valore è un puntatore gestito perché il membro del tipo di valore viene allocato nell' heap di runtime e può essere spostato dal Garbage Collector.

t19s4hxx.collapse_all(it-it,VS.110).gifCodice

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

t19s4hxx.collapse_all(it-it,VS.110).gifOutput

22
23
hello

Vedere anche

Riferimenti

interior_ptr (C++/CLI)