Dan*_*tor 7 c++ pointers destructor friend shared-ptr
我有resource_manager一个std::vector<boost::shared_ptr<resource> >内部维护的课程.resource_manager是朋友班resource.我希望resources只能被创建/删除resource_manager,所以我将它的构造函数设为私有(可以正常工作).
但是,如果我将析构函数设为私有,则代码不会编译,因为析构函数是由调用的boost::shared_ptr,而不是它的朋友resource.我想只仅返回强制执行"不删客户端"规则const resource*从resource_manager,但不知何故,我不满意这个方法提供的安全性(如果一个客户端因为某种跨越一个指向非const发生什么呢?)
除了不使用的明显解决方案之外shared_ptr,您是否有任何解决方法/更好的解决方案来解决我的问题?
Ker*_* SB 11
您可以将自定义删除器传递给共享指针.因此,只需创建一个删除函数或函数(由您决定),而这又是friend您的类:
class Secret
{
~Secret() { }
friend class SecretDeleter;
friend void SecretDelFunc(Secret *);
};
class SecretDeleter
{
public:
void operator()(Secret * p) { delete p; }
};
void SecretDelFunc(Secret * p) { delete p; }
std::shared_ptr<Secret> sp1(new Secret, SecretDeleter());
std::shared_ptr<Secret> sp2(new Secret, SecretDelFunc);
Run Code Online (Sandbox Code Playgroud)