web-dev-qa-db-ja.com

共有ポインタが指すオブジェクトを取得する方法は?

クエリがあります。共有ポインタが指すオブジェクトを直接取得できますか?または、get()呼び出しで基になるRAWポインターを取得し、対応するオブジェクトにアクセスする必要がありますか?

30
Pavan Dittakavi

_shared_ptr_が指すオブジェクトへの参照を取得するには、2つのオプションがあります。 ptrという名前の_shared_ptr_変数があるとします。 _*ptr_または*ptr.get()を使用して参照を取得できます。これら2つは同等である必要がありますが、最初の方が優先されます。

この理由は、生のポインタの逆参照操作を真似ようとしているからです。式_*ptr_は「ptrが指すデータを取得してください」と表示されますが、式*ptr.get()は「ptr内にラップされた生のポインターが指すデータを取得します」。明らかに、最初のものはあなたの意図をより明確に説明しています。

もう1つの理由は、shared_ptr::get()が実際にneed rawポインターへのアクセスを行うシナリオで使用されることを意図していることです。あなたの場合、あなたはそれを必要としないので、それを要求しないでください。生のポインタ全体をスキップして、より安全な_shared_ptr_の世界に住み続けます。

52

上記のケンの答え (またはこれらのソート方法に応じて以下)は素晴らしいです。コメントするのに十分な評判がありません。

->に対してshared_ptr演算子を直接使用して、それが指すオブジェクトのメンバーにアクセスできることを追加したいと思います。

boost documentation は素晴らしい概要を提供します。

編集

C++ 11が広く採用された今、Boostバージョンよりも std::shared_ptr を優先する必要があります。参照解除演算子 here を参照してください。

16
jakar