Имеет ли чисто виртуальный объект указатель на vtbl? - PullRequest
0 голосов
/ 03 октября 2010

Есть ли у чисто виртуального объекта указатель на vtbl?(что, вероятно, указывает на NULL?)

спасибо, я немного запутался со всеми виртуальными механизмами.

Ответы [ 2 ]

3 голосов
/ 03 октября 2010

Не беспокойся об этом. Виртуальные таблицы - это детали реализации, и они даже не гарантированы. Чем больше вы беспокоитесь о том, как это можно сделать, тем меньше узнаете о реальном языке.


Это сказал, да. Затем конкретный класс установит этот указатель так, чтобы он указывал на правильную виртуальную таблицу.

0 голосов
/ 03 октября 2010

Технически не существует такого понятия, как «чисто виртуальный объект».Я предполагаю, что вы имеете в виду объект с чисто виртуальными методами?Но на самом деле вы не можете создать такой объект, потому что он будет абстрактным, а компилятор будет жаловаться.

Сказав это, пока объект создается, он на короткое время является экземпляром абстрактного класса, прежде чем стать экземпляром.производного класса.В этом случае виртуальная таблица будет устанавливать функции, которые она определяет.Вероятно, он будет иметь значение NULL для чисто виртуальных методов.Если вы попытаетесь вызвать, что программа потерпит крах.

Вы можете попробовать это, вызвав виртуальные методы в конструкторе.Вы обнаружите, что они вызывают версию базового класса, если вы вызовете методы базового класса.Если вы вызовете чисто виртуальный метод, он потерпит крах.(В некоторых случаях компилятор выяснит, что вы делаете, и вместо этого будет жаловаться.)

Возьмите домой:

Не вызывайте виртуальные функции в конструкторе, скорее всего, это будетсбивает с толку.На самом деле, в большинстве случаев лучше, если ваш конструктор просто устанавливает свой внутренний статус и не делает ничего слишком сложного.

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