2010-05-27 20 views
89

Estoy tan frustrado en este momento después de varias horas tratando de encontrar dónde se encuentra shared_ptr. Ninguno de los ejemplos que veo muestra el código completo para incluir los encabezados para shared_ptr (y en funcionamiento). Simplemente indicando std, tr1 y <memory> ¡no está ayudando para nada! ¡He descargado boosters y todo pero todavía no aparece! ¿Puede alguien ayudarme diciéndome exactamente dónde encontrarlo?¿Dónde está shared_ptr?

¡Gracias por dejarme expresar mis frustraciones!

EDIT: Veo que mi título ha sido cambiado. Lo siento por eso. Entonces ... también fue porque no estaba claro para mí que shared_ptr es "dependiente de la versión de C++" -> es por eso que no dije mi entorno -> por lo tanto, probablemente por qué era tan difícil para mí encontrarlo.

Estoy trabajando en MSVS2008.

EDIT 2: No sé por qué, pero estaba incluyendo [memoria] y [boost/tr1/memory.hpp] y [boost/tr1/tr1/memory] mientras busco el shared_ptr .. por supuesto, no pude.

Gracias por todas las respuestas.

+3

probablemente sea útil si puede establecer su configuración correctamente, como qué compilador y potenciar la ruta de instalación/versión – YeenFei

+7

A menos que esté en C++ 0x, 'shared_ptr' no es parte del estándar. Sin embargo, es muy común que algunos lo traten como estándar, aunque todavía no lo haya hecho. –

+4

¿Cómo crees que deberíamos responder esta pregunta sin saber si tu entorno es GCC para un chip de lavavajillas de 7.5 bits, un compilador propietario de 128bit o la versión XCode de GCC? – sbi

Respuesta

153

Hay por lo menos tres lugares donde se puede encontrar shared_ptr:

  1. Si su implementación C++ es compatible con C++ 11 (o al menos C++ 11 shared_ptr), luego std::shared_ptr se definirá en <memory>.

  2. Si su implementación en C++ es compatible con las extensiones de biblioteca C++ TR1, entonces std::tr1::shared_ptr probablemente será en <memory> (Microsoft Visual C++) o <tr1/memory> (g ++ 's libstdC++). Boost también proporciona una implementación de TR1 que puede usar.

  3. De lo contrario, puede obtener las bibliotecas de Boost y usar boost::shared_ptr, que se pueden encontrar en <boost/shared_ptr.hpp>.

+3

Para VS 2008, ¿recibió el "paquete de características" o instaló el SP1? Si es así, entonces la parte 2 aquí se aplica a usted, use el espacio de nombres 'tr1'. –

+0

Gracias. Esto funciona como magia. No sé por qué, pero estaba incluyendo y y mientras buscaba el shared_ptr ... por supuesto, no podía. Gracias de nuevo. – Jake

+0

Después de haberme apartado de C++ brevemente, me sorprendió descubrir que (en clang v3.1) 'shared_ptr' todavía estaba en el espacio de nombres' tr1'. Tiene alguna idea sobre esto? – hiwaylon

6

para VS2008 con la actualización del paquete de características, shared_ptr se puede encontrar bajo el espacio de nombres std :: TR1.

std::tr1::shared_ptr<int> MyIntSmartPtr = new int; 

de

si tiene que impulsar la ruta de instalación (por ejemplo @C:\Program Files\Boost\boost_1_40_0) que se añade a la configuración IDE:

#include <boost/shared_ptr.hpp> 
4

Si Your'e mirando bor boost 's shared_ptr, podría haber encontrado la respuesta por googling shared_ptr fácilmente, siguiendo los enlaces a los documentos, y tirando hacia arriba un ejemplo de trabajo completa como this.

En cualquier caso, aquí es una completa minimalista ejemplo de trabajo para usted que acabo hackeado:

#include <boost/shared_ptr.hpp> 

struct MyGizmo 
{ 
    int n_; 
}; 

int main() 
{ 
    boost::shared_ptr<MyGizmo> p(new MyGizmo); 
    return 0; 
} 

Para que el #include para encontrar la cabecera, las bibliotecas, obviamente, necesitan estar en la ruta de búsqueda . En MSVC, configure esto en Configuración del proyecto> Propiedades de configuración> C/C++> Directorios de inclusión adicionales. En mi caso, esto está configurado en C:\Program Files (x86)\boost\boost_1_42