我有一个资源管理器(resource_manager)类,它在内部维护了一个std::vector< boost::shared_ptr< resource > >。resource_manager是resource的友元类。我希望只有resource_manager才能创建/删除resource,所以我将其构造函数设为private(这个方法可行)。
然而,如果我将析构函数设为private,代码就无法编译,因为boost::shared_ptr会调用析构函数,而它不是resource的友元类。我考虑通过只从resource_manager返回const resource*来强制实施“不要由客户端删除”的规则,但某种程度上我对该方法提供的安全性并不满意(如果客户端偶然发现了指向非const的指针怎么办?)
除了不使用shared_ptr的显而易见的解决方案外,您是否有任何解决问题的方法或更好的解决方案?
然而,如果我将析构函数设为private,代码就无法编译,因为boost::shared_ptr会调用析构函数,而它不是resource的友元类。我考虑通过只从resource_manager返回const resource*来强制实施“不要由客户端删除”的规则,但某种程度上我对该方法提供的安全性并不满意(如果客户端偶然发现了指向非const的指针怎么办?)
除了不使用shared_ptr的显而易见的解决方案外,您是否有任何解决问题的方法或更好的解决方案?
const resource*
并不意味着你不能删除它。 - UncleBensconst
的对象。 - MSalters