shared_ptrはどこにありますか?


103

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

欲求不満を解消させてくれてありがとう!

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

MSVS2008に取り組んでいます。

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

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


3
おそらく、コンパイラーやブーストバージョン/インストールパスのように、セットアップを正しく
記述

7
C ++ 0xを使用しているのでない限り、shared_ptrは標準の一部ではありません。まだ一般的ではありませんが、標準にはないものもあります。
Billy ONeal、

4
ご使用の環境が7.5ビットの食器洗い機チップ用のGCC、128ビットのメインフレームの専用コンパイラ、またはXCodeのバージョンのGCCであるかどうかを知らずに、この質問にどのように答えるべきですか?
sbi

私が直面した問題に関する情報を追加するだけです。c++ 0x標準でコンパイルする場合は、g ++の引数として「-std = c ++ 0x」を追加する必要があります。
Mital Vora、2011

1
MSVCを使用している場合は、「#include <memory>」が必要です(gccの場合は、検索用のCMake Find()があるため、プリプロセッサ定義を宣言して、<boost / shared_ptr.hpp>と< tr1 / shared_ptr.h>は、ブーストよりもtr1を最初に選択する-ブーストは "hpp"であるのに対し、tr1は ".h"であることに注意してください-Gentoo / Fedora / Debianで確認されています。メモリ管理用)
HidekiAI

回答:


168

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

  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>


3
VS 2008の場合、「機能パック」を入手しましたか、それともSP1をインストールしましたか?その場合、ここのパート2が当てはまる場合は、名前空間を使用しますtr1
ケイトグレゴリー

ありがとう。これは魔法のように機能します。理由はわかりませんが、<memory>と<boost / tr1 / memory.hpp>と<boost / tr1 / tr1 / memory>を含めて、どこからでもshared_ptrを探していました。もちろん、できませんでした。再度、感謝します。
ジェイク

C ++から少し離れたところ、(clang v3.1では)名前空間shared_ptrにまだ座っていることに驚いたtr1。これについて何か考えはありますか?
hiwaylon 2012

3
@hiwaylon:コンパイルしてい-std=c++11ますか?
James McNellis、2012

@JamesMcNellisはい、残念ながら、それにより他の依存関係に不満が生じ、私は続行できませんでした(時間の制約がある場合)。-std = c ++ 11がトリックであれば、プロジェクトに戻ることができれば自信を持って続行できます。ありがとうございました。
hiwaylon 2012


6

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

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

C:\Program Files\Boost\boost_1_40_0IDE設定に追加インストールパス(たとえば@ )を追加した場合:

#include <boost/shared_ptr.hpp>

3

あなたが探しているbor boostshared_ptrを探している場合は、shared_ptrグーグルで移動し、ドキュメントへのリンクをたどり、このような完全な実用的な例を引き上げることで、答えを簡単に見つけることができます。

いずれにせよ、ここに私がハックしたミニマルな完全な動作例があります:

#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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.