Считается ли плохой практикой
создать класс, который только собирается
быть создан один раз во всем
приложение? Возможно, потому что есть
какой-то производительности ударил или добавил
накладные расходы, понесенные при использовании класса
а не куча функций?
Совсем нет. Это в основном потому, что ваш класс Application может выполнять такие вещи, как наследование и инкапсуляция Нет снижения производительности или дополнительных затрат.
Я планировал иметь WinMain
создать экземпляр Engine как
локальная переменная. Класс двигателя будет
быть довольно большим, содержащим классы
для рендеринга, разбора скрипта, файла
системные вещи и т. д. В основном,
весь игровой движок, кроме ОС
конкретный код, будет содержаться в
Класс двигателя в той или иной форме
(возможно, как пример другого
класс.) Создает локальный экземпляр
моего очень большого класса двигателя в
функция WinMain плохая идея? Является
создание локального экземпляра плохая идея
когда класс будет создан, когда
программа начинается и заканчивается, когда
программа заканчивается? Может быть, новый будет
лучше?
Нет, это в значительной степени так и должно быть. Зачем беспокоиться о выделении кучи? Вы хотите автоматическое уничтожение семантики. Если ваш класс не имеет очень большой размер, сотни КБ или более, в этом случае распределение кучи на основе RAII более разумно, так как объем стека ограничен. То есть физический статический размер для каждого экземпляра, о котором сообщает sizeof (), не включая динамические выделения.
Мой план (я / ва) разделить двигатель
до «модулей», каждый из которых
представлены классом. Двигатель
класс будет содержать экземпляр
почти все остальные модули, вроде как
упомянутое выше, рендеринг, файл
Системное взаимодействие и т. д. Используется
классы как контейнеры для огромных модулей
плохая идея с некоторой точки зрения
(производительность, дизайн, читабельность?)
Это именно то, что объектно-ориентированный дизайн предназначен для инкапсуляции, и разделение программы на четко определенные и разделенные модули, а затем создание экземпляров каждого из них, которые вам нужны, является идеей, лежащей в основе объектно-ориентированного программирования. Размер концепции, которую инкапсулирует класс, обычно считается неактуальным, если это единый концепт. Отличный модульный дизайн - это замечательно.
Я бы порекомендовал использовать наследование во время выполнения для всех зависящих от платформы и, предпочтительно, динамически загружать их во время выполнения (используя класс OS для выполнения динамической загрузки). Это обеспечивает надежную абстракцию во время компиляции и обеспечивает более эффективную компиляцию.