Возможный дубликат:
Проходит ли вызов виртуальной функции C++ для производного объекта через vtable?
У меня есть вопрос относительно виртуальной таблицы С++, особенно для gcc. рассмотрите следующий код
class A{
public:
virtual void doSomething(){}
}
class B : public A{
public:
virtual void doSomething(){}
}
//1
A* a = new A()
a->doSomething();
Теперь вопрос в том, что, поскольку указатель a указывает на объект A, компилятор когда-либо утруждает себя поиском в виртуальной функции или он достаточно умен, чтобы решить эту проблему и избавиться от дерьма с виртуальной таблицей?
Благодарность
A
, как в таком вырожденном случае, вы можете просто сами вызвать правильный метод:a->A::doSomething();
- person StoryTeller - Unslander Monica   schedule 30.12.2012A
изменил указательa
? Компилятор не может предположить, что этого не произойдет. - person CB Bailey   schedule 30.12.2012this
будет UB, не так ли? - person Lol4t0   schedule 30.12.2012this
- это значение r, поэтому его нельзя изменить. Однако это не означает, что конструкторA
может изменить значениеa
. - person CB Bailey   schedule 30.12.2012