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:
- Un artículo sobre los punteros inteligentes , que es un resumen bueno para una comprensión general.
- Una referencia real para
std::shared_ptr
. - Un excelente tutorial que trata todos los métodos de TR1
shared_ptr
junto con el código de muestra.
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)