10

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, но это сильно усложнит создание "нормального" объекта. Буду еще по ходу дела думать.

Возможно это стоит вытащить в Memory неймспейс, т.к. там более логичное расположение для этого

Возможно это стоит вытащить в Memory неймспейс, т.к. там более логичное расположение для этого

Штатные операторы new (delete тоже) запрещены для использования всеми наследниками Object

Штатные операторы new (delete тоже) запрещены для использования всеми наследниками Object

Имплементация выделения памяти и инициализации до вызова конструктора объекта. PS: В Allocate Object утечка памяти. Надо будет исправить.

Имплементация выделения памяти и инициализации до вызова конструктора объекта. PS: В Allocate Object утечка памяти. Надо будет исправить.

GC и Owner пока сломаны. Надо перенести функционал из прошлой итерации

GC и Owner пока сломаны. Надо перенести функционал из прошлой итерации

Тестовый кейс инициализации классов через DO

Тестовый кейс инициализации классов через DO

и его вывод на Windows

и его вывод на Windows

и на Linux

и на Linux

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"