LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

Да не нужен никакой final, девиртуализацию в этой ситуации только совсем тупой компилятор не сделает

Не совсем верно. Если мы получаем указатель/ссылку на объект из функции, чей код компилятору не известен (она в другом модуле), либо это глобальная переменная, то объект всегда может оказаться не того класса (порождённый от нашего) с другими виртуальными методами. Так что в этом случае иного выхода, как обращаться к методам через vtable нет. А вот использование final позволяет компилятору предположить, что этот объект не может быть другого класса, откуда бы он не взялся.

Исходная версия KivApple, :

Да не нужен никакой final, девиртуализацию в этой ситуации только совсем тупой компилятор не сделает

Не совсем верно. Если мы получаем указатель/ссылку на объект из функции, чей код компилятору не известен (она в другом модуле), либо это глобальная переменная, то объект всегда может оказаться не того класса (порождённый от нашего) с другими виртуальными методами. Так что в этом случае иного выхода, как обращаться к методам через vtable нет. А вот использование final позволяет предположить, что этот объект не может быть другого класса, откуда бы он не взялся.