Я знаю, что если класс содержит какие-либо виртуальные функции, большинство компиляторов (если не все) добавляют к его объектам указатель vptr. Кто-то добавляет его первым элементом, кто-то последним. Но требует ли стандарт C++ использование vptr и vtable? Может ли какой-либо компилятор теоретически реализовать это каким-либо другим способом? Если да, то каковы гарантии в отношении схемы хранения полиморфных объектов и общего размера (например, все ли явно определенные поля (+ заполнение) в непрерывном блоке памяти)?
Я не знаю, различается ли это между различными стандартами C++, поэтому я добавил только общий тег C++
.