Relict Engine: Модель памяти. Итерация №3
Пришлось сделать шаг назад, и еще несколько переделать модель представления базового класса, т.к. появились трудности при работе с Lua таблицами и настройки взаимодействия Lua с не корневыми Объектами.
Основные изменения:
- Теперь у каждого объекта от Object есть DefaultObject (DO, CDO - привет Unreal).
- оператор new убран в приватную зону базового класса и кидает bad_alloc ошибку, если все-таки как-то умудриться его вызывать. Заместо него теперь статичная функция template<class _ty> Ty_* Object::New(...) (необходима для выделения места для DO и работы с конструкторами).
- Наконец-то в небытие ушел метод __constructor, теперь нормальный конструктор работает корректно.
- Текстовое имя класса для мета объекта теперь не передается через макрос, но использует stdшный "сахар" typeid().name.
- Конструктор вызывается только при создании DO. При создании "нормального" экземпляра класса, он не вызывается, но вызывается событие OnConstruction атома Scriptable (необходимо для взаимодействия со скриптами)
В результате код стал гораздо более приятнее на вид, хотя и получилось так, что теперь для всех наследуемых от Object классов приходится за собой таскать дефолтный конструктор (если оставить generic, то затирается Meta). Есть у меня идея, вытащить Meta в Memory::OS, но это сильно усложнит создание "нормального" объекта. Буду еще по ходу дела думать.
Имплементация выделения памяти и инициализации до вызова конструктора объекта. PS: В Allocate Object утечка памяти. Надо будет исправить.







Лига Разработчиков Видеоигр
8.9K постов23.2K подписчик
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"