Я читал о Пустой Базовой Оптимизации (EBO). При чтении в голове возникли следующие вопросы:
-
В чем смысл использования пустого класса в качестве базового класса, когда он ничего не способствует производным классам (ни по функциональности, ни по данным)?
-
В этой статье я прочитал следующее:
//S пуст
class struct T: S
{
int x;
};[...]
Обратите внимание, что мы не потеряли никаких данных или точность кода: при создании автономный объект типа S, размер объектов по-прежнему равен 1 (или более), так как до; только когда S используется как основа класс другого класса выполняет свою память снижается до нуля. Чтобы реализовать влияние этой экономии, представьте себе вектор, содержащий 125 000 объекты. Только EBO экономит половину мегабайт памяти!
Означает ли это, что если мы не будем использовать "S" в качестве базового класса "T", мы бы обязательно потребляем вдвое меньше мегабайта памяти? Я думаю, в статье сравниваются два разных сценария, которые, как я считаю, не верны.
Я хотел бы знать реальный сценарий, когда EBO может оказаться полезным. (означает, что в том же сценарии мы обязательно будем потеряны, ЕСЛИ мы не будем использовать EBO!).
Обратите внимание, что если ваш ответ содержит такие пояснения:
Все дело в том, что пустой класс имеет ненулевой размер, но когда производный или выводимый он может иметь нулевой размер, я не прошу об этом, как я уже знаю. Мой вопрос в том, почему кто-нибудь вывел свой класс из пустого класса в первую очередь? Даже если он не выводит и просто пишет свой класс (без какой-либо пустой базы), находится ли он в убытке ЛЮБОЙ способ?