如果class B
源自class A
,我可以dynamic_cast
一个shared_ptr<B>
到 shared_ptr<A>
,以及来自 shared_ptr<A>
到 shared_ptr<B>
?
我只是问自己,因为有了 dynamic cast
你可以做类似 instanceof
的事情在 java 。我问自己这是否也适用于 smart_ptr
.
最佳答案
对于从派生类转换为基类的特殊情况,可以使用赋值运算符来为您执行必要的隐式转换。对于另一个方向,您可以使用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
等。
关于c++11 - 将智能指针转换为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488552/