誰かがそれをどのように行うでしょうか?例えば:
Client* client = it->second;
ここで、it->second は boost::shared_ptr からクライアントへのエラーです:
cannot convert `const ClientPtr' to `Client*' in initialization
誰かがそれをどのように行うでしょうか?例えば:
Client* client = it->second;
ここで、it->second は boost::shared_ptr からクライアントへのエラーです:
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
get
のメソッドを使用しboost::shared_ptr
てポインターを取得できますが、その作業には十分注意してください。参照カウントされた共有ポインターからネイキッド ポインターを抽出することは危険な場合があります (参照カウントがゼロになると削除がトリガーされるため、生のポインターが無効になります)。ポインター)。
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
) の方がおそらく優れており、オーバーヘッドも少なくなりますが、s (または互換性のある API を持つポインター) でのみ機能しshared_ptr
、他の種類のポインターでは機能しません。
危険ではありませんが、c-ctor が関与しています。
Client client( *(it->second.get()) );