stu*_*023 2 c++ casting smart-pointers tr1
使用这种智能指针铸造是否安全?
APtr a(new A());
BPtr & b = (Bptr&)a; // this is it
Run Code Online (Sandbox Code Playgroud)
那里,
class A
{
public:
virtual ~A(){}
virtual void methodA() = 0;
}
typedef std::tr1::shared_ptr<A> APtr;
class B : public A
{
public:
virtual ~B(){}
virtual void methodB() = 0;
}
typedef std::tr1::shared_ptr<B> BPtr;
/////////////////////////////////////////////////////////////////////////////////
BPtr & b = a; //this way doesn't work
Run Code Online (Sandbox Code Playgroud)
要向下转换智能指针,您应该使用xxxx_pointer_cast函数,例如静态强制转换
BPtr b = std::tr1::static_pointer_cast<B>(a);
Run Code Online (Sandbox Code Playgroud)
或动态演员
BPtr b = std::tr1::dynamic_pointer_cast<B>(a);
Run Code Online (Sandbox Code Playgroud)