Я использую платформу ACE, но я попытаюсь описать мою проблему, не ссылаясь на нее.
У меня есть обработчик событий (класс, производный от ACE_Event_Handler).
Ссылка на обработчик событий удерживается некоторым классом менеджера в картах shared_ptr.
В какой-то момент времени я хочу:
- удалить обработчик событий из карты менеджера
- Некоторый метод обработчика событий должен вызываться 3-м классом, который содержит указатель строки на обработчик события (для тех, кто знаком с ACE, это handle_close (), вызываемый ACE Reactor)
Проблема в том, что порядок (1) и (2) не обещан. Если (1) вызывается до (2), (2) будет работать с обработчиком повисших событий.
Поэтому я подумал о добавлении некоторой дополнительной ссылки на обработчик событий, которая будет уменьшена в (2).
Как это можно сделать?
Можно ли сохранить ссылку на обработчик события из самого обработчика события (возможно, используя enable_shared_from_this)?
Спасибо