假设你有一个这样的功能:

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()

重要说明:我无法访问 SmartPtrdoSomething() 代码。

最佳答案

而不是这样做,你可以这样做:

B *b = dynamic_cast< B* >( doSomething.get() );

但你必须检查 b 是否为 NULL。

关于c++ - 智能指针 : cast between base and derived classes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5633695/

10-13 08:19