【发布时间】:2011-12-05 10:27:11
【问题描述】:
使用这种智能指针转换是否安全?
APtr a(new A());
BPtr & b = (Bptr&)a; // this is it
那里,
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
【问题讨论】:
-
为什么不直接使用
BPtr b = a; -
@KennyTM:并非每个 A 都是 B。事实上,所讨论的 A (
a) 肯定不是。 -
@MarceloCantos:抱歉,将代码读作 B 是 A 的基类。
-
@student023:您的
a不是B 的实例,那么您想通过将其视为一个实例来实现什么? -
¤ 您显示的代码无法编译。所以安全问题没有实际意义,或者说,try 是完全安全的。请询问可以编译的内容。
标签: c++ casting smart-pointers tr1