关于智能指针的强制类型转换问题
智能指针可以毫无问题的进行向下类型转换,却不能进行向上类型转换。例如
class A{
virtual boost::shared_ptr<A> clone();
}
class B:public A{
virtual boost::shared_ptr<A> clone();
}
void main()
{
boost::shared_ptr<B> p(new B()); //ok
boost::shared_ptr<B> p1(p->clone()); //error ,因为A* 不能转换成B*
}
对于普通的指针没有这样的问题,因为B* p1=dynamic_cast<B *>(p->clone())肯定是成功的。甚至我可以定义成
class A{
virtual A* clone();
}
class B:public A{
virtual B* clone();
}
有无办法可以对智能指针实施向上的类型转换?
class A{
virtual boost::shared_ptr<A> clone();
}
class B:public A{
virtual boost::shared_ptr<A> clone();
}
void main()
{
boost::shared_ptr<B> p(new B()); //ok
boost::shared_ptr<B> p1(p->clone()); //error ,因为A* 不能转换成B*
}
对于普通的指针没有这样的问题,因为B* p1=dynamic_cast<B *>(p->clone())肯定是成功的。甚至我可以定义成
class A{
virtual A* clone();
}
class B:public A{
virtual B* clone();
}
有无办法可以对智能指针实施向上的类型转换?
...全文
相关推荐
C++箴言:将强制转型减到最少
**利用智能指针和容器**:现代C++标准库提供了诸如 `std::unique_ptr`、`std::shared_ptr` 和 `std::vector` 等容器,这些可以帮助管理资源并减少类型转换的需要
C语言指针简明教程
同时,文中提到的类型转换也是编程中常见的问题,理解并熟练运用类型转换对于编写健壮的代码至关重要。
C++十大低级错误和C++编程规范
不良的类型转换: - **强制类型转换不当**:不安全的强制类型转换可能导致数据丢失或错误的结果,尤其是从浮点型到整型的转换。
C++程序设计陷阱
- **隐式转换**:在某些情况下,C++会自动进行类型转换,这可能导致意外的结果。- **强制类型转换**:使用强制类型转换时应格外小心,因为它可能会导致类型不匹配的问题。#### 6.
嵌入式C/C++指针专题[项目代码]
通过代码示例,文章详细介绍了指针的强制类型转换,使得开发者可以更加灵活地处理不同类型间的数据转换问题。针对野指针的成因及避免方法,本文给出了实用的指导,帮助开发者在实际编程中避免潜在的运行时错误。



