У меня есть глобальная карта для хранения умных указателей.
Другие классы получают эти указатели по ключу.
В качестве члена переменной они используют ключ использования: int USING_POINTER_KEY.
Так что я могу определить в «getGlobalPointer»: получить указатель с карты по ключу «USING_POINTER_KEY».
Оно работает! И у меня было достаточно причин хранить свои указатели таким образом. Все нормально.
Моя проблема: Как я могу научить свою глобальную карту автоматически удалять записи, которые больше не используются классами?
Я думаю с подсчетом ссылок. Но я не уверен, как …
Этот вид всеобъемлющей схемы — красный флаг.
Но вы можете создать пользовательский удалитель с помощью умного указателя (std::shared_ptr
). Просто передайте указатель функции в качестве второго аргумента shared_ptr
конструктор. Функция может удалить указатель из глобальной таблицы.
Умные указатели уже являются реализацией подсчета ссылок, поэтому вы просто хотите добавить обратный вызов.
Других решений пока нет …