将boost :: shared_ptr转换为实际的类

时间:2010-11-10 13:16:12

标签: c++ boost boost-smart-ptr

有人会这样做吗? 例如:

Client* client = it->second;

where it-> second是对客户端的boost :: shared_ptr 错误:

cannot convert `const ClientPtr' to `Client*' in initialization

4 个答案:

答案 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()) );