我有一个基类:
class Base{
public:
Base();
virtual ~Base();
.....
}
class Derived2: public Base{
public:
Derived2();
...
}
并且在我的主要语言中,我尝试将boost :: shared_ptr从基础动态转换为派生2:
testFunction(boost:shared_ptr<Base> base){
Derived2* derived2 = dynamic_cast<Derived2*>(base);
}
提升为dynamic_pointer_cast
:
boost::shared_ptr<Derived2> derived2 = boost::dynamic_pointer_cast<Derived2>(base);
dynamic_cast的操作数不是指针类型
我该如何解决?
通过不使用非指针类型作为dynamic_cast
的操作数。换句话说,通过使用指针类型作为操作数。
您可以使用get
成员函数从共享指针中获取指针。
请注意不要让这个裸露的指针泄漏到函数范围之外。只要参数base
指向对象,就可以相信其有效性。另外,请勿尝试获取该裸指针的所有权,因为它的所有权已被共享。
P.S。 std::shared_ptr
自C ++ 11起就已存在于标准库中。
P.P.S。 dynamic_cast
是一种代码气味。