classe ref e struct ref (C++/CLI e C++/CX)

As extensões classe ref ou struct ref declaram uma classe ou struct cujo tempo de vida do objeto é administrado automaticamente. Quando o objeto não está mais acessível ou sai do escopo, a memória é liberada.

Todos os Runtimes

Sintaxe

class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};

Parâmetros

class_access
(Opcional) A acessibilidade da classe ou struct fora do assembly. Os valores possíveis public são e private (private é o padrão). As classes aninhadas ou structs não podem ter um especificador class_access.

name
O nome da classe ou struct.

Modificador
(Opcional) abstract e sealed são os modificadores válidos.

inherit_access
(Opcional) A acessibilidade de base_type. A única acessibilidade permitida é public (public é o padrão).

base_type
(Opcional) Um tipo base. No entanto, um tipo de valor não pode atuar como um tipo base.

Saiba mais nas descrições de linguagem específicas desse parâmetro nas seções Windows Runtime e Common Language Runtime.

Comentários

A acessibilidade de membro padrão de um objeto declarado com classe ref ouclasse value é private. E a acessibilidade de membro padrão de um objeto declarado com struct refou struct value é public.

Quando um tipo de referência herda de outro tipo de referência, as funções virtuais na classe base devem ser substituídas explicitamente (com override) ou ocultas (com new (novo slot em vtable)). As funções de classe derivadas também devem ser explicitamente marcadas como virtual.

Para detectar no tempo de compilação se um tipo é classe ref ou struct ref, ou classe value ou struct value, use __is_ref_class (type), __is_value_class (type) ou __is_simple_value_class (type). Saiba mais em Suporte para compilador de traços de tipo.

Saiba mais sobre classes e structs em

Windows Runtime

Comentários

Confira Classes e structs ref e Classes e structs value.

Parâmetros

base_type
(Opcional) Um tipo base. Uma classe ref ou uma struct ref pode herdar de zero ou mais interfaces e de zero ou um tipo ref. Uma classe value ou uma struct value só pode herdar de mais interfaces ou de nenhuma.

Quando você declara um objeto usando as palavras-chave classe ref ou struct ref, o objeto é acessado por um identificador para um objeto, ou seja, um ponteiro de contador de referência para o objeto. Quando a variável declarada sai do escopo, o compilador exclui automaticamente o objeto subjacente. Quando o objeto é usado como um parâmetro em uma chamada ou é armazenado em uma variável, um identificador para o objeto é realmente passado ou armazenado.

Quando você declara um objeto usando as palavras-chave classe value ou struct value, o tempo de vida do objeto declarado não é supervisionado. O objeto é como qualquer outra classe ou struct C++ padrão.

Requisitos

Opção do compilador: /ZW

Common Language Runtime

Comentários

A tabela a seguir lista as diferenças de sintaxe mostradas na seção Todos os runtimes que são específicas a C++/CLI.

Parâmetros

base_type
(Opcional) Um tipo base. Um classe ref ou struct ref pode herdar de nenhuma ou mais interfaces gerenciadas e de zero ou um tipo ref. Um classe valuee ou struct value só pode herdar de nenhuma ou mais interfaces gerenciadas.

As palavras-chave classe ref e struct ref dizem ao compilador que a classe ou struct deve ser alocada no heap. Quando o objeto é usado como um parâmetro em uma chamada ou é armazenado em uma variável, uma referência ao objeto é realmente passada ou armazenada.

As palavras-chave classe value e struct value informam ao compilador que o valor da classe ou struct alocada é passado para as funções ou armazenado em membros.

Requisitos

Opção do compilador: /clr

Confira também

Extensões de componente para .NET e UWP