shared_ptr make_shared example c++ g++ shared-ptr

c++ - example - make_shared



C++ std:: shared_ptr uso e informaciĆ³n (3)

Estoy tratando de usar std::shared_ptr en mi código. He visto que ha habido otras preguntas sobre el tema, pero todavía estoy recibiendo un error de compilación. ¿Tengo la versión correcta de gcc y la configuración?

Que he hecho:

He intentado compilar mi código con ambos encabezados por separado - <memory> y <tr1/memory> pero aún así obtengo los errores a continuación en ambos casos.

La versión de gcc que estoy usando es

gcc --version gcc (GCC) 4.3.2

Cuando std::shared_ptr encabezado <memory> , uso std::shared_ptr y con el <tr1/memory> uso std::tr1::shared_ptr ? ¿Es esto correcto?

He configurado el shared_ptr de la siguiente manera:

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

El error que recibo es el siguiente:

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

cuando intento el <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

Parece que no estoy incluyendo algo correctamente. ¿Algunas ideas?

Sé que la biblioteca boost ha shared_ptr pero estas bibliotecas no son una opción para mí en este momento.

EDITAR: Solo para agregar, mis opciones de compilador son las siguientes: g ++ -O3 -g3 -m32 -fPIC -Wno-desprecated -pthread -m32 ¿Me falta algo?

PD: ¿Hay alguna literatura útil sobre los punteros inteligentes std?


Si no tienes shared_ptr en std, puedes usarlo desde boost.

#include <boost/shared_ptr.hpp> boost::shared_ptr<A> ptr_A( new A() );


También pedías referencias o literatura ...

Encontré 3 artículos que pueden ayudar:

También un comentario en su código de ejemplo:

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

El argumento de la plantilla debe ser A en lugar de A *:

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


std::tr1::shared_ptr es parte de las adiciones de TR1 a la STL de C ++.
Con GCC, está disponible a través de #include <tr1/memory> (GCC 4.1) o #include <memory> (GCC 4.3)