set vtable указатель соответственно
Эта часть почти полностью определена. Ваш компилятор может не использовать vtables. Может быть несколько указателей vtable или один или несколько указателей на вещи, которые не являются vtables. Множественное наследование всегда интересно, как и виртуальные базовые классы. Эти метаданные не могут быть скопированы с memcpy
на другой объект, поэтому указатель (и) не обязательно должен быть абсолютным. Там могут быть смещения, которые относятся к самому указателю объекта.
IIRC Что обычно происходит, так это то, что вызывается конструктор базового класса, тогда указатель vtable устанавливается в базовый класс, тогда вызывается первый конструктор производного класса и т. Д. Это необходимо для удовлетворения требований спецификации что происходит, когда виртуальная функция вызывается в конструкторе. Насколько я помню, в стандарте нет «списка действий», а только определенного порядка инициализации.
Таким образом, невозможно обобщить то, что делает реализация, тем более, что то, что у вас есть, не является реализацией стандарта C++. Если он разрезает углы, оставляя «новый», предположительно, не без оснований, потому что он думает, что вы не должны использовать его на целевой платформе, тогда кто знает, какие другие правила игнорируемого им языка. Если бы можно было макетировать «новое» с помощью malloc и немного нажимать указатель, то почему же компилятор не просто реализует новый? Я думаю, вам нужно задать вопросы, помеченные вашим конкретным компилятором и платформой, чтобы любые эксперты вашего компилятора могли ответить.
+1 для понимания виртуального базового класса строительства –