vtordisp
pragma
Controla a adição do membro oculto do deslocamento de construção/destruição vtordisp
. O vtordisp
pragma é específico de C++.
Sintaxe
#pragma vtordisp(
push,
[ ] n)
#pragma vtordisp(pop)
#pragma vtordisp()
#pragma vtordisp(
push,
[ ] { |on
off
})
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 vtordisp
pragma é 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 vtordisp
pragma 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)