Dela via


vtordisp pragma

Styr tillsatsen av den dolda vtordisp konstruktion/destruktionsförskjutningsmedlem. vtordisp pragma är C++-specifik.

Syntax

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

Parametrar

push
Push-överför den aktuella inställningen vtordisp på den interna kompilatorstacken och anger den nya inställningen vtordisp till n. Om n inte har angetts ändras den aktuella inställningen för vtordisp.

pop
Tar bort den översta posten från den interna kompilatorstacken och återställer inställningen vtordisp till det borttagna värdet.

n
Anger det nya värdet för inställningen vtordisp. Möjliga värden är 0, 1eller 2, som motsvarar /vd0, /vd1och /vd2 kompilatoralternativ. Mer information finns i /vd (Inaktivera byggförskjutningar).

on
Motsvarar #pragma vtordisp(1).

off
Motsvarar #pragma vtordisp(0).

Anmärkningar

vtordisp pragma gäller endast för kod som använder virtuella baser. Om en härledd klass åsidosätter en virtuell funktion som den ärver från en virtuell basklass, och om en konstruktor eller destructor för den härledda klassen anropar den funktionen med hjälp av en pekare till den virtuella basklassen, kan kompilatorn införa extra dolda vtordisp fält i klasser med virtuella baser.

vtordisp pragma påverkar layouten för klasser som följer den. Alternativen /vd0, /vd1och /vd2-kompilatorn anger samma beteende för fullständiga moduler. Om du anger 0 eller off ignoreras de dolda vtordisp medlemmarna. Inaktivera endast vtordisp om det inte finns någon möjlighet att klassens konstruktorer och destruatorer anropar virtuella funktioner på objektet som pekas på av this pekaren.

Om du anger 1 eller onaktiverar standardinställningen de dolda vtordisp medlemmar där de är nödvändiga.

Om du anger 2 aktiveras dolda vtordisp medlemmar för alla virtuella baser med virtuella funktioner. #pragma vtordisp(2) kan vara nödvändigt för att säkerställa korrekt prestanda för dynamic_cast på ett delvis konstruerat objekt. Mer information finns i Kompilatorvarning (nivå 1) C4436.

#pragma vtordisp()återställer inställningen vtordisp till den ursprungliga inställningen utan argument.

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

Se även

Pragma-direktiv och nyckelorden __pragma och _Pragma