Подтвердить что ты не робот

Apple и shared_ptr

Кажется, что-то здесь что-то не хватает. Я переместился от boost::shared_ptr до std::shared_ptr. shared_ptr был частью TR1 еще в середине 2000-х годов, и он должен быть доступен везде в 2012 году.

Попытка использовать shared_ptr под Apple получает множество ссылок undefined:

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

Я пытаюсь включить его следующим образом (я считаю, что мне нужно настроить его, но я не помню синтаксис С++, чтобы сказать "посмотрите здесь или посмотрите там" ):

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

Apple man-страницы ничего не вызывают:

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

У меня Mac OS X 10.8 (полностью исправлена), Xcode (полностью исправлена) и установлены средства командной строки.

Итак, как использовать std:: shared_ptr на платформах Apple?

4b9b3361

Ответ 1

#include <tr1/memory> будет работать с любым компилятором, используя libstdС++. В качестве альтернативы, с Clang:

#include <memory>
using std::shared_ptr;

и скомпилировать с помощью c++ -std=c++11 -stdlib=libc++ .... Я понятия не имею, почему Clang использует libstdС++ по умолчанию; предположительно, для совместимости с GCC.

Вы не можете найти страницы руководства, потому что у libstdС++ нет man-страниц. Полезно, не так ли. В документации источника есть HTML-документация.