Я считаю довольно странным, что неиспользуемые виртуальные функции должны быть определены в отличие от неиспользуемых обычных функций. Я немного понимаю неявные vtables и vpointers, которые создаются при создании объекта класса - это несколько отвечает на вопрос (что функция должна быть определена так, чтобы указатели на виртуальную функцию могли быть определены), но это толкает мой запрос еще дальше.Зачем нужны неиспользуемые виртуальные функции?
Зачем нужна запись vtable для функции, если нет абсолютно никакой вероятности, что виртуальная функция будет вызвана вообще?
class A{
virtual bool test() const;
};
int main(){
A a; //error: undefined reference to 'vtable for A'
}
Даже если я объявил A::test()
она никогда не использовалась в программе, но она по-прежнему бросает ошибку. Может ли компилятор не запускаться через программу и реализовать test()
никогда не назывался - и, следовательно, не требуется запись vtable? Или это неразумно ожидать от компилятора?
Вы не можете создать виртуальный класс. Но тривиально создать нулевую функцию или функцию, которая просто возвращает константу объявленного типа. – Logicrat