Имеется одиночный класс с одной виртуальной функцией, не чисто-виртуальной.
Будет ли создана таблица виртуальных функций для этого класса, если класс объявлен, но нигде в программе не создается объектов этого класса?
В каком сегменте программы располагается таблица виртуальных функций класса?
Вопросы с собеседования по С++
Расположение vtable и vpointer зависит от реализации компилятора.
Дальше глубже в ELF будет одна структура а на win32 другая.
Для gcc можно покопаться в
-fdump-class-hierarchy
"-fdump-class-hierarchy-options (C++ only) Dump a representation of each class's hierarchy and virtual function table layout to a file. The file name is made by appending .class to the source file name, and the file is created in the same directory as the output file. If the `-options' form is used, options controls the details of the dump as described for the -fdump-tree options. "
взято с http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Debugging-Options.html
Будет ли создана таблица виртуальных функций для этого класса, если класс объявлен, но нигде в программе не создается объектов этого класса?
Это вопрос качества реализации. Может будет, а может не будет. На такие вопросы можно отвечать лишь в привязке к конкретной реализации, конкретной версии этой реализации и даже конкретных ее настроек.
С точки же зрения языка С++, никакой "таблицы виртуальных функций" не существует вообще.
Так как методы нелокального класса имеют внешнее связывание, таблица виртуальных функций скорее всего будет создана компилятором, т.к. в традиционной реализации на стадии компиляции компилятор не может знать, нужна эта таблица или нет. А вот на стадии сборки финального выполняемого модуля линкер уже имеет возможность выбросить ненужную таблицу виртуальных функций.
Насколько я помню, популярным подходом (GCC?) является на стадии компиляции помещать таблицу виртуальных функций в тот объектный файл, в котором располагается определение первого (в порядке объявления) не-pure виртуального метода класса.
В каком сегменте программы располагается таблица виртуальных функций класса?
В сегменте инициализированных данных.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пытаюсь получить доступ к элементу массива через его указатель, объявленный как shared_ptr так:
Считается хорошим тоном обеспечивать noexcept-swap функцию-член классаЧто делать, если появляется необходимость добавить в этой функции такую...
У меня есть часть кода, в которой должна создаваться папка на диске С: