vtordisp
pragma
Steruje dodatkami ukrytej vtordisp
konstrukcji/destrukcji składowej przemieszczania. Element vtordisp
pragma jest specyficzny dla języka C++.
Składnia
#pragma vtordisp(
[push,
] n)
#pragma vtordisp(pop)
#pragma vtordisp()
#pragma vtordisp(
[push,
] {on
|off
})
Parametry
push
Wypycha bieżące vtordisp
ustawienie na wewnętrznym stosie kompilatora i ustawia nowe vtordisp
ustawienie na n. Jeśli n nie zostanie określony, bieżące vtordisp
ustawienie pozostanie niezmienione.
pop
Usuwa rekord z wewnętrznego stosu kompilatora i przywraca vtordisp
ustawienie do usuniętej wartości.
n
Określa nową wartość ustawienia vtordisp
. Możliwe wartości to 0
, 1
lub 2
, odpowiadające opcjom kompilatora /vd0
, /vd1
i /vd2
. Aby uzyskać więcej informacji, zobacz /vd
(Wyłączanie przemieszczeń budowlanych).
on
Odpowiednik elementu #pragma vtordisp(1)
.
off
Odpowiednik elementu #pragma vtordisp(0)
.
Uwagi
Element vtordisp
pragma ma zastosowanie tylko do kodu, który używa baz wirtualnych. Jeśli klasa pochodna zastępuje funkcję wirtualną, która dziedziczy z wirtualnej klasy bazowej, a konstruktor lub destruktor dla klasy pochodnej wywołuje tę funkcję przy użyciu wskaźnika do wirtualnej klasy bazowej, kompilator może wprowadzić dodatkowe ukryte vtordisp
pola do klas z bazami wirtualnymi.
Element vtordisp
pragma ma wpływ na układ klas, które są zgodne z nim. Opcje kompilatora /vd0
, /vd1
i /vd2
określają to samo zachowanie dla kompletnych modułów. Określanie 0
lub off
pomija ukryte vtordisp
elementy członkowskie. Wyłącz tylko vtordisp
wtedy, gdy nie ma możliwości, aby konstruktory i destruktory klasy wywoływać funkcje wirtualne w obiekcie wskazywane this
przez wskaźnik.
Określenie 1
wartości domyślnej lub on
, włącza ukryte vtordisp
elementy członkowskie, gdy są one niezbędne.
Określanie 2
umożliwia ukrytych vtordisp
elementów członkowskich dla wszystkich baz wirtualnych z funkcjami wirtualnymi. #pragma vtordisp(2)
może być konieczne zapewnienie prawidłowej dynamic_cast
wydajności obiektu częściowo skonstruowanego. Aby uzyskać więcej informacji, zobacz Ostrzeżenie kompilatora (poziom 1) C4436.
#pragma vtordisp()
, bez argumentów, przywraca vtordisp
ustawienie do jego początkowego ustawienia.
#pragma vtordisp(push, 2)
class GetReal : virtual public VBase { ... };
#pragma vtordisp(pop)