Владение и память¶
Этот раздел фиксирует, кто владеет объектами и кто отвечает за освобождение.
Владение сценой и сущностями¶
- Сцена владеет своим
tc_entity_pool. - При
tc_scene_freeпул уничтожается, и все сущности сцены удаляются.
Владение компонентами¶
Контракт для tc_component*:
| Операция | Действие |
|---|---|
tc_entity_pool_add_component |
Вызывает retain (если factory_retained == false) |
tc_entity_pool_remove_component |
Вызывает release |
tc_entity_pool_free(entity) |
Удаляет все компоненты, вызывает release для каждого |
Практическое правило: внешний код не должен рассчитывать на время жизни компонента без учёта ref-count контракта.
Владение SoA-данными¶
- SoA-данные живут внутри архетипов и принадлежат архетипам.
- При переходе сущности между архетипами общие компоненты копируются.
tc_archetype_free_rowвызываетdestroy(полное удаление).tc_archetype_detach_rowне вызываетdestroy(используется при миграциях).
Владение extensions¶
| Операция | Действие |
|---|---|
tc_scene_ext_attach |
Создаёт instance через create |
tc_scene_ext_detach |
Вызывает destroy |
tc_scene_ext_detach_all |
Вызывает destroy для всех extensions |
| Shutdown реестра | Вызывает destroy для оставшихся extensions |