зачем нам вообще нужен VPTR? - PullRequest
       8

зачем нам вообще нужен VPTR?

1 голос
/ 20 декабря 2010

И почему мы не используем один и тот же метод для не виртуальных функций?

Я имею в виду, почему мы используем виртуальные функции таким образом?Разве мы не можем просто использовать их как невиртовые и переопределить их?

И если этот метод экономит нам время / пространство или что-то еще, почему бы нам не использовать тот же метод для не виртуальных функций??Я имею в виду, что имеет смысл иметь одну таблицу функций для определенного класса.

В любом случае, заранее спасибо, я просто немного запутался.

Ответы [ 3 ]

6 голосов
/ 20 декабря 2010

Вы не можете иметь полиморфизм во время выполнения без использования уровня косвенности. Вот для чего нужен vptr.

vptr не используется для неполиморфных функций, потому что это косвенное обращение чего-то стоит. Философия C ++ заключается в том, что вы не платите за то, что не используете.

EDIT:

Вот некоторая информация о том, как работают виртуальные таблицы: http://en.wikipedia.org/wiki/Virtual_table

2 голосов
/ 20 декабря 2010

Использование vptr позволяет разрешение метода на основе типа объекта, а не типа переменной. Неиспользование vptr ускоряет вызовы методов. Разработчики C ++ решили позволить удобство виртуальных функций, но не требуют снижения производительности для других функций.

2 голосов
/ 20 декабря 2010

Компилятор по сути генерирует прямой вызов не виртуальных методов. При вызове виртуального метода компилятор генерирует код для поиска адреса метода, а затем выполняет вызов по этому адресу. Таким образом, в теории это, по крайней мере, еще один поиск при вызове виртуальной функции. В противном случае не было бы никакой причины нести эту стоимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...