[英]Convert boost::shared_ptr to actual class
有人会这样做吗? 例如:
Client* client = it->second;
其中 - >第二个是boost :: shared_ptr到Client错误:
cannot convert `const ClientPtr' to `Client*' in initialization
boost :: shared_ptr有一个.get()方法来检索原始指针。
关于何时以及何时不使用它的文档: http : //www.boost.org/doc/libs/1_44_0/libs/smart_ptr/shared_ptr.htm
您可以使用boost::shared_ptr
上的get
方法来检索指针,但要非常小心:从引用计数共享指针中提取裸指针可能很危险(如果引用计数达到零,将触发删除,从而使您的原始指针无效)。
boost:shared_ptr
重载operator*
:
boost::shared_ptr< T > t_ptr(new T());
*t_ptr; // this expression is a T object
要获得指向t
的指针,您可以使用get
函数或使用*t_ptr
地址:
&*t_ptr; // this expression is a T*
第一种方法(使用get
)可能更好,并且开销更少,但它只适用于shared_ptr
(或带有兼容API的指针),而不适用于其他类型的指针。
没有危险,但涉及到c-ctor。
Client client( *(it->second.get()) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.