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