С++ поддерживает динамическое связывание через виртуальный механизм. Но поскольку я понимаю, что виртуальный механизм представляет собой деталь реализации компилятора, а стандарт просто определяет поведение того, что должно произойти в определенных сценариях. Большинство компиляторов реализуют виртуальный механизм через виртуальную таблицу и виртуальный указатель. И да, я знаю, как это работает. Поэтому мой вопрос заключается не в деталях реализации виртуальных указателей и таблицы. Мои вопросы:
- Существуют ли какие-либо компиляторы, которые реализуют Virtual Mechanism любым другим способом, кроме виртуального указателя и механизма виртуальной таблицы? Насколько я видел больше всего (прочитайте g++, Microsoft visual studio) реализуйте его через виртуальную таблицу, механизм указателя. Практически существуют ли какие-либо другие реализации компилятора?
-
sizeof
любого класса с виртуальной функцией будет представлять собой размер указателя (vptr insidethis
) на этом компиляторе. Поэтому, если виртуальный механизм ptr и tbl сам является реализацией компилятора, это выражение, которое я сделал выше всегда верно?