vtordisp pragma

Controla a adição do membro oculto do deslocamento de construção/destruição vtordisp. O vtordisppragma é específico de C++.

Sintaxe

#pragma vtordisp(push, [ ] n )
#pragma vtordisp(pop)
#pragma vtordisp()
#pragma vtordisp(push, [ ] { | onoff })

Parâmetros

push
Envia a configuração atual de vtordisp na pilha interna do compilador e define a nova configuração de vtordisp como n. Se n não for especificado, a configuração de vtordisp atual será inalterada.

pop
Remove o registro superior da pilha interna do compilador e restaura a configuração de vtordisp para o valor removido.

n
Especifica o novo valor para a configuração vtordisp. Os valores possíveis são 0, 1 ou 2, correspondentes às opções do compilador /vd0, /vd1 e /vd2. Para mais informações, confira /vd (Desabilitar deslocamentos de construção).

on
Equivalente a #pragma vtordisp(1).

off
Equivalente a #pragma vtordisp(0).

Comentários

O vtordisppragma é aplicável somente ao código que usa bases virtuais. Se uma classe derivada substitui uma função virtual que herda de uma classe base virtual e, se um construtor ou um destruidor para a classe base derivada chamar essa função usando um ponteiro para a classe base virtual, o compilador virtual poderá inserir campos vtordisp ocultos extras nas classes com bases virtuais.

O vtordisppragma afeta o layout das classes que o seguem. As opções /vd0, /vd1 e /vd2 especificam o mesmo comportamento para os módulos concluídos. Especificar 0 ou off elimina os membros vtordisp ocultos. Desative vtordisp somente se não houver nenhuma possibilidade de os construtores e destruidores da classe chamarem funções virtuais no objeto apontado pelo ponteiro this.

Especificar 1 ou on, o padrão, habilita membros vtordisp ocultos quando eles são necessários.

Especificar 2 habilita os membros vtordisp ocultos para todas as bases virtuais com funções virtuais. #pragma vtordisp(2) pode ser necessário para garantir o desempenho correto de dynamic_cast em um objeto parcialmente construído. Para mais informações, confira Aviso do compilador (nível 1) C4436.

#pragma vtordisp(), sem argumentos, restaura a configuração de vtordisp como a configuração inicial.

#pragma vtordisp(push, 2)
class GetReal : virtual public VBase { ... };
#pragma vtordisp(pop)

Confira também

Pragmadiretivas e as __pragma palavras-chave e _Pragma