Кажется, я что-то здесь упускаю. Я переехал из boost::shared_ptr
в std::shared_ptr
, shared_ptr
был частью TR1 еще в середине 2000-х, и он должен быть доступен везде в 2012 году.
Пытаясь использовать shared_ptr
под Apple, я получаю множество неопределенных ссылок:
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 (полностью исправлена) и инструменты командной строки.
Так как же использовать std :: shared_ptr на платформах Apple?
#include <tr1/memory>
будет работать с любым компилятором, использующим libstdc ++. С другой стороны, с Clang:
#include <memory>
using std::shared_ptr;
и скомпилировать с c++ -std=c++11 -stdlib=libc++ ...
, Я понятия не имею, почему Clang использует libstdc ++ по умолчанию; предположительно это для совместимости GCC.
Вы не можете найти справочные страницы, потому что libstdc ++ не имеет справочных страниц. Полезно, не правда ли. В исходном дистрибутиве есть HTML документация.
Других решений пока нет …