У меня есть класс resource_manager
, который поддерживает внутри std :: vector
. resource_manager
- это класс друзей для ресурса
. Я хочу, чтобы ресурсы
создавались / удалялись только resource_manager
, поэтому я сделал его конструкторы закрытыми (что нормально работает).
Однако, если я сделаю деструктор закрытым, код не будет компилироваться, потому что деструктор вызывается boost :: shared_ptr
, который не является другом ресурса
. Я подумываю о применении правила «не удалять клиентами», возвращая только ресурс const *
из resource_manager
, но почему-то меня не устраивает безопасность, которую обеспечивает этот метод ( что, если клиент каким-то образом наткнется на указатель на неконстантный?)
Помимо очевидного решения отказа от использования shared_ptr
, есть ли у вас какой-либо обходной путь / лучшее решение моей проблемы?