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 Я что-то пропустил?
PS Есть ли полезная литература по стандартным указателям?
3 ответа
std::tr1::shared_ptr
является частью дополнения TR1 к C++ STL.
С GCC это доступно либо через #include <tr1/memory>
(GCC 4.1) или #include <memory>
(GCC 4.3)
Вы также просили ссылки или литературу...
Я нашел 3 статьи, которые могут помочь:
- Статья о Smart Pointers, которая является хорошим обзором для общего понимания.
- Фактическая ссылка для
std::shared_ptr
, - Отличный учебник, обсуждающий каждый метод TR1
shared_ptr
вместе с примером кода.
Также комментарий к вашему примеру кода:
std::shared_ptr<A*> ptr_A = shared_ptr( new A() );
Аргумент шаблона должен быть A вместо A*:
std::shared_ptr<A> ptr_A = shared_ptr( new A() );
Если у вас нет shared_ptr
в STD вы можете использовать его из Boost.
#include <boost/shared_ptr.hpp>
boost::shared_ptr<A> ptr_A( new A() );