#include "iostream" class A { private: int a; public : A(): a(-1) {} int getA() { return a; } }; class A; class B : public A { private: int b; public: B() : b(-1) {} int getB() { return b; } }; int main() { std::auto_ptr<A> a = new A(); std::auto_ptr<B> b = dynamic_cast<std::auto_ptr<B> > (a); return 0; }
错误:不能dynamic_cast`(& a) – > std :: auto_ptr< _Tp> :: get()const
解决方法
那么,std :: auto_ptr< B>不是从std :: auto_ptr< A>派生的.但是B来自A. auto_ptr不知道那个(它不是那么聪明).看起来您想使用共享所有权指针. boost :: shared_ptr是理想的,它还提供了dynamic_pointer_cast:
boost::shared_ptr<A> a = new A(); boost::shared_ptr<B> b = dynamic_pointer_cast<B> (a);
对于auto_ptr,这样的事情无法真正起作用.因为所有权将转移到b.但如果演员表失败,b就无法获得所有权.目前还不清楚该怎么办.您可能不得不说,如果演员表失败,将继续拥有所有权 – 这听起来会导致严重的麻烦.最好开始使用shared_ptr.然后a和b都指向相同的对象 – 但是B作为shared_ptr< B>和a作为shared_ptr< A>
原文地址:https://www.jb51.cc/c/117623.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。