将智能指针转换为基数 class
Casting smartpointers to base class
如果 class B
派生自 class A
,我可以 dynamic_cast
一个 shared_ptr<B>
到一个 shared_ptr<A>
,以及从 shared_ptr<A>
到一个 shared_ptr<B>
?
我只是问自己,因为使用 dynamic cast
你可以在 Java 中做类似 instanceof
的事情。我问自己这是否也适用于 smart_ptr
.
对于从派生 class 转换为基础 class 的特殊情况,可以使用赋值运算符为您执行必要的隐式转换。对于另一个方向,您可以使用 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
等
如果 class B
派生自 class A
,我可以 dynamic_cast
一个 shared_ptr<B>
到一个 shared_ptr<A>
,以及从 shared_ptr<A>
到一个 shared_ptr<B>
?
我只是问自己,因为使用 dynamic cast
你可以在 Java 中做类似 instanceof
的事情。我问自己这是否也适用于 smart_ptr
.
对于从派生 class 转换为基础 class 的特殊情况,可以使用赋值运算符为您执行必要的隐式转换。对于另一个方向,您可以使用 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
等