[英]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.