15

ここで何かが足りないようです。からに移動しboost::shared_ptrましたstd::shared_ptrshared_ptr2000年代半ばにはTR1の一部でしたが、2012年にはどこでも利用できるようになるはずです。

Appleの下で使おうとするとshared_ptr、たくさんの未定義の参照が表示されます。

SecureArray.h:26:12: error: no member named 'shared_ptr' in
      namespace 'std'
using std::shared_ptr;
      ~~~~~^
SecureArray.h:27:12: error: no member named 'tr1' in namespace
      'std'
using std::tr1::shared_ptr;
      ~~~~~^
SecureArray.h:487:5: error: unknown type name 'shared_ptr'
    shared_ptr<SecureVector> m_vector;

一般的なコンパイラコマンドは次のとおりです(GCCとClangの両方が失敗します)。

clang++ -g2 -ggdb -O0 -fcatch-undefined-cxx0x-behavior
  -DSAFEINT_DISALLOW_UNSIGNED_NEGATION=1 -pipe -std=c++0x -Wall -Wextra
  -Wno-unused-parameter -Wno-tautological-compare 
  -I. -I./esapi -I./deps -I/usr/local/include -I/usr/include -fpic
  -c src/DummyConfiguration.cpp -o src/DummyConfiguration.o

私はそれを次のように含めようとしています(これを微調整する必要があると思いますが、「ここを見て、またはそこを見て」と言うC ++構文を思い出せません):

#include <memory>
using std::shared_ptr;
using std::tr1::shared_ptr;

Appleのマニュアルページは何も表示されていません:

$ man shared_ptr
No manual entry for shared_ptr
$ man -k shared_ptr
shared_ptr: nothing appropriate

Mac OS X 10.8(完全にパッチが適用されている)、Xcode(完全にパッチが適用されている)、およびコマンドラインツールがインストールされています。

では、Appleプラットフォームでstd :: shared_ptrをどのように使用するのでしょうか?

4

1 に答える 1

22

#include <tr1/memory>libstdc++を使用してどちらのコンパイラでも動作します。または、Clangを使用する場合:

#include <memory>
using std::shared_ptr;

でコンパイルしc++ -std=c++11 -stdlib=libc++ ...ます。Clangがデフォルトでlibstdc++を使用している理由がわかりません。おそらくそれはGCC互換性のためです。

libstdc ++にはマニュアルページがないため、マニュアルページが見つかりません。役に立ちましたね。ソースディストリビューションにはHTMLドキュメントがあります。

于 2012-11-19T01:33:36.413 に答える