![]() |
От: | Аноним | |
Дата: | 29.08.09 06:50 | ||
Оценка: | 1 (1) |
Но имейте в виду, что в общем случае оптимизация EBO применяется только для одиночного наследования. Действующие в С++ правила размещения объектов в памяти обычно делают невозможной такую оптимизацию, если производный класс имеет более одного базового.
class empty_base_0
{ };
class empty_base_1
{ };
class storage
{ int i; };
class impl_0 : public empty_base_0
{ int g; };
class impl_1 : public empty_base_0, public storage
{ };
class impl_2 : public empty_base_0, public storage
{ int g; };
class impl_3 : public empty_base_0, public empty_base_1, public storage
{ int g; };
class impl_4 : public empty_base_0, public storage, public empty_base_1
{ int g; };
int _tmain(int argc, _TCHAR* argv[])
{
int iSize = 0;
iSize = sizeof(impl_0); // 4
iSize = sizeof(impl_1); // 4
iSize = sizeof(impl_2); // 8
iSize = sizeof(impl_3); // 12
iSize = sizeof(impl_4); // 8
return 0;
}