Поделиться через


Предупреждение компилятора (уровень 4) C4435

"class1": структура объекта в /vd2 изменится из-за виртуального базового класса "class2"

Это предупреждение отключено по умолчанию. Подробнее: Выключенные по умолчанию предупреждения компилятора .

В параметре компиляции по умолчанию /vd1 производный класс не имеет vtordisp поля для указанной виртуальной базы. Если значение /vd2 или #pragma vtordisp(2) в действительности, vtordisp поле будет присутствовать, изменив макет объекта. Это может привести к проблемам с двоичной совместимостью, если взаимодействующие модули компилируются с разными vtordisp параметрами.

Пример

Следующий пример создает C4435.

// C4435.cpp
// compile with: /c /W4
#pragma warning(default : 4435)
class A
{
public:
    virtual ~A() {}
};

class B : public virtual A  // C4435
{};

См. также

vtordisp
/vd (отключение смещений при выполнении конструктора)