关于指针类型转换

在编写基于虚函数的多态代码时,指针的类型转换很有用,比如把一个基类指针转型为一个子类指针或者反过来。但是对于share_ptr不能使用诸如static_cast(p.get())的形式,这将导致转型后的指针无法再被shared_ptr正确管理。为了支持这样的用法,shared_ptr提供了类似的转型函数 static_pointer_cast()、const_pointer_cast()、dynamic_pointer_cast(),它们与标准的转型操作符static_cast()、const_cast()和dynamic_cast()类似,但返回的转型后的shared_ptr。

例如,下面的代码使用

 

dynamic_pointer_cast()把一个shared_ptr向下转型为一个

shared_ptr,然后又用

static_pointer_cast()重新转为

 

shared_ptr:shared_ptr sp1(new bad_exception("error")); shared_ptr sp2 = dynamic_pointer_cast(sp1); shared_ptr sp3 = static_pointer_cast(sp2); assert(sp3 == sp1);


 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(关于指针类型转换)