Структура нулевого размераC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Структура нулевого размера

Сообщение Гость »


Согласно стандарту C++ (унаследованному от C), пустые структуры тем не менее имеют ненулевой размер. Причина этого (жалкое ИМХО) в том, что две разные переменные должны иметь разные адреса. Теперь наследование пустой структуры не всегда «раздувает» объект. Но в некоторых ситуациях это так.

У меня довольно сложная архитектура классов, включающая в себя яростное вуду шаблонов. В результате конечные классы (экземпляры которых мне нужно создать) могут иметь унаследованное несколько пустых структур. В связи с этим со временем часть из них может быть завышена. И самое худшее то, что их расположение в памяти на самом деле зависит от порядка наследования.

Мне бы хотелось от всего этого избавиться, если это возможно.

Существует ли компилятор C++, который можно настроить так, чтобы исключить эту непроизводительную трату места за счет фактического нарушения стандарта?

Изменить:

Я имею в виду следующее:

struct Empty1 {}; структура Empty2 {}; структура NonEmpty { целое значение; }; структура MyClass1 :public Непустой ,публичный Пусто1 ,публичный Empty2 { }; структура MyClass2 :public Пусто1 , публичный непустой ,публичный Empty2 { }; структура MyClass3 :public Пусто1 ,публичный Empty2 , публичный непустой { }; STATIC_ASSERT(sizeof(MyClass1) == 8); STATIC_ASSERT(sizeof(MyClass2) == 4); STATIC_ASSERT(sizeof(MyClass3) == 8); Не только пустые структуры раздувают объект (когда унаследовано более одной такой вещи), но и результат зависит от порядка наследования пустых структур.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»