Compartir a través de


vtordisp pragma

Controla la adición del miembro oculto de desplazamiento de construcción/destrucción de vtordisp. El vtordisppragma 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 vtordisppragma 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 vtordisppragma afecta el diseño de las clases que la siguen. Las opciones del compilador /vd0, /vd1 y /vd2especifican 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)

Consulte también

Directivas pragma y las palabras clave __pragma y _Pragma