【问题标题】:How to use boost::smart_ptr in polymorphism?如何在多态中使用 boost::smart_ptr?
【发布时间】:2011-06-13 11:00:38
【问题描述】:

提升智能指针can be used with polymorphism,但是如何将子类转换回指针?

using namespace boost;
// ...
shared_ptr<SuperClass> a_ptr(new SubClass);
// ...
shared_ptr<SubClass> b_ptr = (shared_ptr<SubClass>)a_ptr; // Doesn't compile

最后一行没有编译并给出error C2440: 'type cast' : cannot convert from 'boost::shared_ptr&lt;T&gt;' to 'boost::shared_ptr&lt;T&gt;'

【问题讨论】:

    标签: casting polymorphism boost-smart-ptr


    【解决方案1】:

    你需要使用static_pointer_cast:

    struct B { virtual ~B() { } };
    struct D : B { };
    
    shared_ptr<B> bp(new D);
    shared_ptr<D> dp(static_pointer_cast<D>(b));
    

    (还有dynamic_pointer_castconst_pointer_cast 分别用于执行动态和常量转换。)

    【讨论】:

    • 我认为在这种情况下应该是dynamic_pointer_cast,对吧?
    • 如果在编译时不知道类型是否是 中指定的类型。否则应该使用 boost::static_pointer_cast。
    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多