Rav*_*ven 0 c++ class type-conversion shared-ptr c++11
这可能会推广到任何模板化的类,但我用shared_ptr遇到了这个问题.我有类系统,如:
class A {
protected:
// some data
}
class B : public A {
// some access functions
}
class C : public A {
// some other access functions
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这个概念,因为在我的库中我使用的是不应该向用户公开的函数集,所以我将这些函数分成两个接口类.现在,我知道我可以使用一个班级和朋友,但如果需要多个班级来访问这些功能,这会变得很难看.
但是,我有问题,那些类是通过arround传递的shared_ptr,我需要保留引用计数(因为数据会被破坏).因此,我需要在此示例中转换shared_ptr<B>为shared_ptr<C>反之亦然.shared_ptr如果提供了所需的功能,是否允许这样的事情,如果有,那是什么?构造函数?分配运营商?或者我是否需要更高级别并投射整个指针而不仅仅是内容?到目前为止我没有运气.
是的,如果你有一个更好/更整洁的隐藏某些功能的方法,我会很高兴听到它,但我也想回答这个问题.
你要std::static_pointer_cast和std::dynamic_pointer_cast来自<memory>:
struct A {}; struct B : A {};
std::shared_ptr<B> p(std::make_shared<B>());
std::shared_ptr<A> q(std::static_pointer_cast<A>(p));
// now p and q **share** ownership over their pointed-to object.
Run Code Online (Sandbox Code Playgroud)