假设你有一个这样的功能:
SmartPtr<A> doSomething(SmartPtr<A> a);
和这样的类(class):
class A { }
class B : public A { }
现在我这样做:
SmartPtr<A> foo = new B();
doSomething(foo);
现在,我想从
SmartPtr<B>
取回一个 doSomething
对象。SmartPtr<B> b = doSomething(foo);
是否可以 ?我必须做什么样的类型转换?
现在,我刚刚发现了一些我认为丑陋的东西:
B* b = (B*)doSomething().get()
重要说明:我无法访问
SmartPtr
和 doSomething()
代码。 最佳答案
而不是这样做,你可以这样做:
B *b = dynamic_cast< B* >( doSomething.get() );
但你必须检查 b 是否为 NULL。
关于c++ - 智能指针 : cast between base and derived classes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5633695/