Нет причин ожидать, что это сработает, и нет причин ожидать, что это не сработает.
Вы вызываете функцию для несуществующего объекта через неинициализированный и недействительный указатель.
Все может случиться.
Все.
На практике вы не увидите больших результатов виртуальной отправки, поскольку они основаны на данных, хранящихся в несуществующем объекте, тогда как обычный вызов функции проще и может "просто произойти" без необходимости действительно разыменовываем указатель.
Но на самом деле это не так, потому что компиляторы сложны, и все предполагаемое значение (независимо от того, что это такое в программе с неопределенным поведением !) Может быть легко потеряно из вашего кода в процессе перевода и оптимизация.
Язык, который немного меньше заботится о том, чтобы «платить за то, что я не использую», может сделать это серьезной ошибкой, но это не так, как работает C ++.