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

С++ 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

Похоже, я не включаю что-то правильно. Любые идеи?

Я знаю, что библиотека boost имеет shared_ptr, но сейчас эти библиотеки не подходят для меня.

EDIT: Чтобы добавить, мои параметры компилятора следующие: g++ -O3 -g3 -m32 -fPIC -Wno-deprecated -pthread -m32 Я что-то пропустил?

P.S. Есть ли полезная литература по умным указателям std?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

#include <boost/shared_ptr.hpp>

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