vtordisp
pragma
Controla la adición del miembro oculto de desplazamiento de construcción/destrucción de vtordisp
. El vtordisp
pragma es específico de C++.
Sintaxis
#pragma vtordisp(
[push,
] n)
#pragma vtordisp(pop)
#pragma vtordisp()
#pragma vtordisp(
[push,
] {on
|off
})
Parámetros
push
Inserta el valor actual de vtordisp
en la pila interna del compilador y establece el nuevo valor de vtordisp
en n. Si no se especifica n, el valor actual de vtordisp
no cambia.
pop
Quita el registro superior de la pila interna del compilador y restaura el valor de vtordisp
al valor quitado.
n
Especifica el nuevo valor de la configuración vtordisp
. Los valores posibles son 0
, 1
o 2
, correspondientes a las opciones del compilador /vd0
, /vd1
y /vd2
. Para obtener más información, consulte /vd
(Deshabilitar desplazamientos de construcción).
on
Equivalente a #pragma vtordisp(1)
.
off
Equivalente a #pragma vtordisp(0)
.
Comentarios
La vtordisp
pragma solo es aplicable al código que usa bases virtuales. Si una clase derivada invalida una función virtual que hereda de una clase base virtual y si un constructor o destructor para la clase derivada llama a esa función con un puntero a la clase base virtual, el compilador puede incluir campos ocultos adicionales de vtordisp
en clases con bases virtuales.
La vtordisp
pragma afecta el diseño de las clases que la siguen. Las opciones del compilador /vd0
, /vd1
y /vd2
especifican el mismo comportamiento para módulos completos. Al especificar 0
o off
se suprimen los miembros ocultos de vtordisp
. Desactive vtordisp
solamente si no existe ninguna posibilidad de que los constructores y destructores de la clase llamen a funciones virtuales en el objeto al que señala el puntero this
.
Al especificar 1
o on
, que es el valor predeterminado, se habilitan los miembros ocultos de vtordisp
donde se necesitan.
Especificar 2
habilita los miembros de vtordisp
para todas las bases virtuales con funciones virtuales. #pragma vtordisp(2)
puede ser necesario para garantizar un rendimiento correcto de dynamic_cast
en un objeto construido parcialmente. Para obtener más información, consulte Advertencia del compilador (nivel 1) C4436.
#pragma vtordisp()
, sin argumentos, restaura el valor de vtordisp
al valor inicial.
#pragma vtordisp(push, 2)
class GetReal : virtual public VBase { ... };
#pragma vtordisp(pop)