0
我很惊讶,编译器拒绝编译这样的代码:如何动态地转换boost :: scoped_ptr?
class A { virtual ~A() {} };
class B : public A { virtual ~B() {} void foo() {} };
//...
boost::scoped_ptr<A> p1(new B);
boost::scoped_ptr<B> p2 = boost::dynamic_pointer_cast<B>(p1);
p2->foo();
为什么这是不可能的?什么是最好的方式来做到这一点?
我发现这个解决方案:
boost::scoped_ptr<A> p1(new B);
B* p2 = dynamic_cast<B*>(p1.get());
p2->foo();
有只使用智能指针的方法吗?
注意:为了兼容性原因,我不使用C++ 11。
'boost :: scoped_ptr'不允许共享或转让所有权 – Praetorian