Como declarar tipos de valores com a palavra-chave interior_ptr (C++/CLI)
Um interior_ptr pode ser usado com um tipo de valor.
Importante
Esse recurso de linguagem é compatível com a opção do compilador /clr
, mas não pela opção do compilador /ZW
.
Exemplo: interior_ptr com tipo de valor
Descrição
O seguinte exemplo em C++/CLI mostra como usar um interior_ptr com um tipo de valor.
Código
// 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
Exemplo: ponteiro this
Descrição
Em um tipo de valor, o ponteiro this
é avaliado como interior_ptr.
No corpo de uma função membro não estática de um tipo de valor V
, this
é uma expressão do tipo interior_ptr<V>
cujo valor é o endereço do objeto para o qual a função é chamada.
Código
// 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
}
};
Exemplo: operador address-of
Descrição
O exemplo a seguir mostra como usar o operador address-of com membros estáticos.
O endereço de um membro do tipo Visual C++ estático produz um ponteiro nativo. O endereço de um membro de tipo de valor estático é um ponteiro gerenciado porque o membro de tipo de valor é alocado no heap de runtime e pode ser movido pelo coletor de lixo.
Código
// 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
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de