Предположим, что у меня есть класс, без данных:Размер базового класса внутри производного класса
struct Empty {
/*some methods here*/
};
и производный класс
struct Derived: Empty {
int a;
int b;
char c;
....
}__attribute__((packed));`
Объекты пустого класса имеют размер = 1. Слейте часть производного класса обычно имеет размер 0. Насколько я понимаю, компилятор видит, что базовый пустой класс не имеет данных, поэтому он может оптимизировать размер пустого, если он «внутри» Производится, но это не обязательно для стандартного.
Так что вопрос:
Могу ли я каким-то образом определить во время компиляции, что Empty часть производного класса не реально занимают память.
Я понимаю, что я могу проверить, например, sizeof(Derived) = sizeof(a) + sizeof(b) ...
Но это слишком много, и есть несколько классов, таких как Derived. Есть ли более элегантное решение?
Почему вы хотите это знать? Обратите внимание, что член или базовый класс может занимать память без добавления к размеру производного класса (используя пробел, потерянный для заполнения). Также обратите внимание, что 'sizeof' в структуре может быть меньше или больше суммы' sizeof' его членов и баз. – skyking
Я собираюсь использовать эти классы Derived для представления некоторых сетевых данных. Таким образом, все такие производные классы будут иметь упакованный атрибут. Также я собираюсь унаследовать от некоторого класса шаблона для реализации Curiously Recurring Template Pattern. Так что все производные классы будут иметь некоторую общую функциональность. Однако я не хочу, чтобы это наследование влияло на макет классов Derived. –