2

誰かがそれをどのように行うでしょうか?例えば:

Client* client = it->second;

ここで、it->second は boost::shared_ptr からクライアントへのエラーです:

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

4 に答える 4

7

boost::shared_ptr には、生のポインタを取得する .get() メソッドがあります。

使用する場合と使用しない理由に関するドキュメント: http://www.boost.org/doc/libs/1_44_0/libs/smart_ptr/shared_ptr.htm

于 2010-11-10T13:18:01.167 に答える
7

getのメソッドを使用しboost::shared_ptrてポインターを取得できますが、その作業には十分注意してください。参照カウントされた共有ポインターからネイキッド ポインターを抽出することは危険な場合があります (参照カウントがゼロになると削除がトリガーされるため、生のポインターが無効になります)。ポインター)。

于 2010-11-10T13:18:47.790 に答える
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) の方がおそらく優れており、オーバーヘッドも少なくなりますが、s (または互換性のある API を持つポインター) でのみ機能しshared_ptr、他の種類のポインターでは機能しません。

于 2010-11-10T13:19:49.887 に答える
1

危険ではありませんが、c-ctor が関与しています。

Client client( *(it->second.get()) );
于 2010-11-10T14:47:09.993 に答える