Apple и shared_ptr

Кажется, я что-то здесь упускаю. Я переехал из 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?

14

Решение

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

#include <memory>
using std::shared_ptr;

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

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

21

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector