簡體   English   中英

將boost :: shared_ptr轉換為實際的類

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM