Перейти к содержанию

Владение и память

Этот раздел фиксирует, кто владеет объектами и кто отвечает за освобождение.

Владение сценой и сущностями

  • Сцена владеет своим 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