将智能指针投射到基类

时间:2016-04-07 22:46:42

标签: c++11 inheritance casting smart-pointers

如果class B来自class A,我可dynamic_cast shared_ptr<B>shared_ptr<A>,从shared_ptr<A>到{{1} }}?

我只是问自己,因为使用shared_ptr<B>,您可以在Java中执行类似dynamic cast的操作。我问自己这是否适用于instanceof

1 个答案:

答案 0 :(得分:4)

对于从派生类转换为基类的特定情况,可以使用赋值运算符为您执行必要的隐式转换。对于另一个方向,您可以使用dynamic_pointer_cast。

#include <memory>

struct A { virtual ~A() = 0; };
struct B: A { };

void example()
{
    // derived to base
    std::shared_ptr<B> b;
    std::shared_ptr<A> a = b;

    // base to derived
    std::shared_ptr<A> a2;
    std::shared_ptr<B> b2 = std::dynamic_pointer_cast<B>(a2);
}

有关投射操作的更多信息,请参阅http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast - 所有常见的嫌疑人都有等同物,例如reinterpret_pointer_cast等。