Читать книгу Ссылки и указатели в C++: от основ к безопасности и современному коду - - Страница 106

Задача 11: Размер класса с виртуальными функциями

Оглавление

Вы должны написать программу, которая определяет и выводит размер объекта класса, содержащего хотя бы одну виртуальную функцию. Объявите класс с приватной или публичной виртуальной функцией без параметров и тела, создайте в функции main экземпляр такого класса (или используйте оператор sizeof без создания объекта) и выведите его размер с помощью std::cout. Убедитесь, что вывод соответствует размеру указателя на виртуальную таблицу на вашей платформе.

Подсказка: виртуальные функции заставляют компилятор неявно добавлять в каждый объект скрытый указатель на таблицу виртуальных методов (vptr). На 64-битных системах этот указатель занимает 8 байт, поэтому даже пустой класс с виртуальной функцией будет иметь размер 8. Не пытайтесь добавлять поля – размер определяется исключительно наличием механизма динамического полиморфизма.

Ссылки и указатели в C++: от основ к безопасности и современному коду

Подняться наверх