Я хочу хранить указатели на один экземпляр объекта в нескольких (двух или более) контейнерах. В этой идее я столкнулся с одной проблемой: как я могу справиться с удалением этого объекта. У объектов довольно бурная жизнь (я говорю об игре, но я думаю, что эта ситуация не столь специфична), и их можно удалять довольно часто. На мой взгляд, эта проблема делится на две проблемы
1.
Как мне сообщить контейнерам об удалении? В C # я использовал для создания логического свойства IsDead в хранимых объектах, поэтому каждая итерация основного цикла сначала находит «мертвые» объекты и удаляет их. Циркулярная ссылка отсутствует, и все достаточно ясно :-) Правильно ли этот метод?
2.
Даже если я реализую эту технику в C ++, я сталкиваюсь с трудностями при вызове деструкторов, если этот объект находится в некоторых контейнерах. Даже если я создаю какое-то поле 'IsDead' и удаляю мертвый объект из всех списков, мне пришлось освободить память.
После прочтения некоторых статей у меня возникла идея, что у меня должен быть один «главный» контейнер с shared_ptr для всех моих объектов, а другие контейнеры должны хранить для них weak_ptr, поэтому только основной контейнер проверяет состояние объекта, а другие смотрят только на shared_ptr. Верны ли мои намерения или есть другое решение?