c++ boost c++11 shared-ptr smart-pointers

c++ - ¿Dónde está shared_ptr?



boost c++11 (4)

Hay al menos tres lugares donde puede encontrar shared_ptr :

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

  2. Si su implementación en C ++ admite las extensiones de biblioteca C ++ TR1, entonces std::tr1::shared_ptr probablemente estará 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 puede encontrar en <boost/shared_ptr.hpp> .

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 de shared_ptr (y de trabajo). ¡Simplemente indicar std , tr1 y <memory> no está ayudando en absoluto! ¡He descargado boosters y todo pero todavía no aparece! ¿Puede alguien ayudarme diciéndome exactamente dónde encontrarlo?

¡Gracias por dejarme expresar mis frustraciones!

EDITAR: 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é fue 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 buscaba el shared_ptr ... por supuesto, no pude ''t.

Gracias por todas las respuestas.


Si está buscando shared_ptr de bor boost , podría haber encontrado fácilmente la respuesta al buscar en shared_ptr , siguiendo los enlaces a los documentos, y ver un ejemplo completo de trabajo como este .

En cualquier caso, aquí hay un ejemplo de trabajo completo minimalista para ti que acabo de hackear:

#include <boost/shared_ptr.hpp> struct MyGizmo { int n_; }; int main() { boost::shared_ptr<MyGizmo> p(new MyGizmo); return 0; }

Para que #include encuentre el encabezado, obviamente las bibliotecas deben 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


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

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

de

si tu ruta de instalación de boost (por ejemplo, @ C:/Program Files/Boost/boost_1_40_0 ) se agregó a tu configuración de IDE:

#include <boost/shared_ptr.hpp>