专门的shared_ptr转换C++ 0x

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如果提供了所需的功能,是否允许这样的事情,如果有,那是什么?构造函数?分配运营商?或者我是否需要更高级别并投射整个指针而不仅仅是内容?到目前为止我没有运气.

是的,如果你有一个更好/更整洁的隐藏某些功能的方法,我会很高兴听到它,但我也想回答这个问题.

Ker*_* SB 5

你要std::static_pointer_caststd::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)