web-dev-qa-db-ja.com

shared_ptrはどこにありますか?

Shared_ptrの場所を見つけようとして数時間たった今、私はとてもイライラしています。私が見る例のどれも、shared_ptr(および動作中)のヘッダーを含む完全なコードを示していません。単にstdtr1、および<memory>と述べるだけではまったく役に立ちません。ブーストをすべてダウンロードしましたが、まだ表示されません!誰かがそれを見つける場所を正確に伝えることで私を助けることができますか?

フラストレーションを解消させてくれてありがとう!

編集:タイトルが変更されたようです。ごめんなさいそのため、shared_ptrが「C++バージョン依存」であることが明確ではなかったためでもありました->それが、環境を記述しなかった理由です->したがって、おそらくそれを見つけるのが非常に困難でした。

私はMSVS2008に取り組んでいます。

編集2:理由はわかりませんが、shared_ptrを探している間に[memory]と[boost/tr1/memory.hpp]と[boost/tr1/tr1/memory]を含めていました。もちろん、できませんでした。 't。

すべての回答をありがとう。

100
Jake

shared_ptrを見つけることができる場所は少なくとも3つあります。

  1. C++実装がC++ 11(または少なくともC++ 11 shared_ptr)をサポートしている場合、std::shared_ptr<memory>で定義されます。

  2. C++実装がC++ TR1ライブラリ拡張をサポートしている場合、std::tr1::shared_ptrはおそらく<memory>(Microsoft Visual C++)または<tr1/memory>(g ++のlibstdc ++)にあります。 Boostは、使用可能なTR1実装も提供します。

  3. それ以外の場合は、Boostライブラリを取得して、boost::shared_ptrにある<boost/shared_ptr.hpp>を使用できます。

166
James McNellis
7
Firas Assaad

機能パックが更新されたVS2008の場合、shared_ptrは名前空間std :: tr1にあります。

std::tr1::shared_ptr<int> MyIntSmartPtr = new int;

IDE設定に追加されたブーストインストールパス(@ C:\Program Files\Boost\boost_1_40_0など)がある場合:

#include <boost/shared_ptr.hpp>
6
YeenFei

探しているのがbor boostshared_ptr であれば、 で簡単に答えを見つけることができます。 shared_ptr をグーグルで検索し、ドキュメントへのリンクをたどり、 this などの完全な動作例を引き出します。

いずれにせよ、ここに、私がちょうどハックしたあなたのための最小限の完全な実例があります:

#include <boost/shared_ptr.hpp>

struct MyGizmo
{
    int n_;
};

int main()
{
    boost::shared_ptr<MyGizmo> p(new MyGizmo);
    return 0;
}

#includeがヘッダーを見つけるには、明らかにライブラリが検索パスにある必要があります。 MSVCでは、プロジェクト設定>構成プロパティ> C/C++>追加のインクルードディレクトリでこれを設定します。私の場合、これはC:\Program Files (x86)\boost\boost_1_42に設定されています

3
John Dibling