当前位置:  开发笔记 > 编程语言 > 正文

为什么auto_ptr的dynamic_cast会失败?

如何解决《为什么auto_ptr的dynamic_cast会失败?》经验,为你挑选了2个好方法。

好吧,std::auto_ptr不是源于std::auto_ptr.但是B源于A.auto_ptr不知道那个(它不是那么聪明).看起来您想使用共享所有权指针.boost::shared_ptr是理想的,它还提供了dynamic_pointer_cast:

boost::shared_ptr a = new A();
boost::shared_ptr b = dynamic_pointer_cast (a);

对于auto_ptr,这样的事情无法真正起作用.因为所有权将转移到b.但如果演员表失败,b就无法获得所有权.目前还不清楚该怎么办.您可能不得不说,如果演员表失败,将继续拥有所有权 - 这听起来会导致严重的麻烦.最好开始使用shared_ptr.两者ab随后将指向同一个对象-但B作为shared_ptra作为shared_ptr



1> Johannes Sch..:

好吧,std::auto_ptr不是源于std::auto_ptr.但是B源于A.auto_ptr不知道那个(它不是那么聪明).看起来您想使用共享所有权指针.boost::shared_ptr是理想的,它还提供了dynamic_pointer_cast:

boost::shared_ptr a = new A();
boost::shared_ptr b = dynamic_pointer_cast (a);

对于auto_ptr,这样的事情无法真正起作用.因为所有权将转移到b.但如果演员表失败,b就无法获得所有权.目前还不清楚该怎么办.您可能不得不说,如果演员表失败,将继续拥有所有权 - 这听起来会导致严重的麻烦.最好开始使用shared_ptr.两者ab随后将指向同一个对象-但B作为shared_ptra作为shared_ptr



2> Logan Capald..:

动态转换不起作用.A : public B并不意味着auto_ptr : public auto_ptr.这就是boost shared_ptr提供的原因shared_dynamic_cast.你可以写一个auto_ptr动态演员:

template
std::auto_ptr auto_ptr_dynamic_cast(std::auto_ptr& in) {
  auto_ptr rv;
  R* p;
  if( p = dynamic_cast( in.get() ) ) {
      in.release();
      rv = p;
  }
  return rv;

}

请注意这里发生的事情.由于auto_ptrs具有所有权语义,因此成功的向下转换意味着原始更通常的类型,auto_ptr不再拥有所有权.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有