C ++ std :: shared_ptr использование и информация - PullRequest
18 голосов
/ 17 ноября 2011

Я пытаюсь использовать std::shared_ptr в своем коде.Я видел, что были другие вопросы по этому вопросу, но я все еще получаю ошибку компилятора.Я получил правильную версию gcc и настройки?

Что я сделал:

Я попытался скомпилировать мой код с обоими заголовками отдельно - <memory> и <tr1/memory>, но все равно получаюниже приведены ошибки в обоих случаях.

Используемая версия gcc:

gcc --version
gcc (GCC) 4.3.2

Когда я включаю заголовок <memory>, я использую std::shared_ptr и с заголовком <tr1/memory> Iиспользовать 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> header

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 Есть ли какая-нибудь полезная литература по интеллектуальным указателям std?

Ответы [ 3 ]

23 голосов
/ 17 ноября 2011

std::tr1::shared_ptr является частью дополнения TR1 к C ++ STL.
С GCC это доступно или через #include <tr1/memory> (GCC 4.1) или #include <memory> (GCC 4.3)

10 голосов
/ 17 ноября 2011

Вы также просили ссылки или литературу ...

Я нашел 3 статьи, которые могут помочь:

Также комментарий к вашему примеру кода:

std::shared_ptr<A*> ptr_A = shared_ptr( new A() ); 

Аргумент шаблона должен быть A вместо A *:

std::shared_ptr<A> ptr_A = shared_ptr( new A() ); 
6 голосов
/ 17 ноября 2011

Если у вас нет shared_ptr в std, вы можете использовать его из Boost.

#include <boost/shared_ptr.hpp>

boost::shared_ptr<A> ptr_A( new A() );
...