入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

智能指针类型转换

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

例如,下面的代码使用

 

 

dynamic_pointer_cast<T>()把一个shared_ptr<std::exception>向下转型为一个

shared_ptr<std::exception>,然后又用

 

static_pointer_cast<T>()重新转为

 

 

 

shared_ptr<std::exception>:

view plain
  1. shared_ptr<std::exception> sp1(new bad_exception("error"));  
  2. shared_ptr<bad_exception> sp2 = dynamic_pointer_cast<bad_exception>(sp1);  
  3. shared_ptr<std::exception> sp3 = static_pointer_cast<std::exception>(sp2);  
  4. assert(sp3 == sp1);  

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。