有人会这样做吗? 例如:
Client* client = it->second;
where it-> second是对客户端的boost :: shared_ptr 错误:
cannot convert `const ClientPtr' to `Client*' in initialization
答案 0 :(得分:7)
boost :: shared_ptr有一个.get()方法来检索原始指针。
此处有关何时以及何时不使用它的文档:http://www.boost.org/doc/libs/1_44_0/libs/smart_ptr/shared_ptr.htm
答案 1 :(得分:7)
您可以使用get
上的boost::shared_ptr
方法检索指针,但要小心非常:从共享的引用中提取裸指针指针可能很危险(如果引用计数达到零,则会触发删除,从而使原始指针无效)。
答案 2 :(得分:2)
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的指针),而不适用于其他类型的指针。
答案 3 :(得分:1)
没有危险,但涉及到c-ctor。
Client client( *(it->second.get()) );