web-dev-qa-db-ja.com

C ++ std :: shared_ptrの使用法と情報

コードでstd::shared_ptrを使用しようとしています。この件に関して他の質問があることを確認しましたが、それでもコンパイラエラーが発生します。適切なバージョンのgccとセットアップを入手しましたか?

私がやった事:

両方のヘッダーを使用してコードを個別にコンパイルしようとしました— <memory>および<tr1/memory>でも、どちらの場合でも以下のエラーが発生します。

私が使用しているgccのバージョンは

gcc --version
gcc (GCC) 4.3.2

<memory>ヘッダーを含める場合はstd::shared_ptrを使用し、<tr1/memory>ヘッダーを使用する場合はstd::tr1::shared_ptrを使用しますか?これは正しいです?

Shared_ptrを次のように設定しました:

std::shared_ptr<A*> ptr_A = shared_ptr( new A() );

私が得るエラーは次のとおりです:

src/WH.cxx:156: error: 'shared_ptr' is not a member of 'std'
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope

<tr1/memory>ヘッダーを試すと

src/WH.cxx:156: error: 'std::tr1' has not been declared
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope

正しく入力していないようです。何か案は?

ブーストライブラリにshared_ptrがあることは知っていますが、現時点ではこれらのライブラリは選択できません。

編集:追加するだけですが、コンパイラオプションは次のとおりです:g ++ -O3 -g3 -m32 -fPIC -Wno-deprecated -pthread -m32何か不足していますか?

追伸stdスマートポインターに関する有用な資料はありますか?

18
MWright

std::tr1::shared_ptrは、C++ STLに追加されたTR1の一部です。
GCCでは、#include <tr1/memory>(GCC 4.1)または#include <memory>(GCC 4.3)

23
Alok Save

あなたは参考文献や文献も求めていました...

次の3つの記事が役立ちます。

コード例についてのコメント:

std::shared_ptr<A*> ptr_A = shared_ptr( new A() ); 

テンプレート引数は、A *ではなくAにする必要があります。

std::shared_ptr<A> ptr_A = shared_ptr( new A() ); 
10
Carsten Greiner

ない場合はshared_ptr stdでは、ブーストから使用できます。

#include <boost/shared_ptr.hpp>

boost::shared_ptr<A> ptr_A( new A() );
6
murrekatt