В C++ проблема проста.C++ RTTI Inheritance приводит к увеличению размера класса
У меня есть 2 класса, один содержит другой как часть его реализации.
struct A
{
void do_something()
{
};
};
struct B
{
A obj_A;
void hello_world()
{
};
};
Теперь проблема заключается в том, что структура В один байт больше, если А является частью B, когда я делать SizeOf (B) и объект типа B. А 100% только будет включать в себя только невиртуальном членов (нет необходимости в виртуальной таблице), и нет необходимости в проверке типа. Есть ли способ (например, директива компилятора) полностью удалить ненужный байт из B, но все же получить доступ к функции члена A через B?
Я могу только предположить, что дополнительный байт - это компилятор, добавленный char * к имени A «A», но любые другие идеи могут быть полезны.
Если ваш компилятор G ++, попробуйте отключение RTTI путем компиляции с помощью 'g ++ -fno-rtti'. Если проблема не устранена, укажите полный исходный файл C++, который обнаруживает проблему, и я увижу, какой размер моего компилятора дает. – pts
FWIW: Я попытался скомпилировать ваш код с g ++ (версия 4.2.4) с и без члена obj_A, с включенным RTTI и без него, и каждый раз, когда я получил sizeof (B) == 1. Таким образом, кажется, что некоторая информация отсутствует от вашего вопроса. –