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