C++Punteros inteligentes


Sintaxis

  • std::shared_ptr<ClassType> variableName = std::make_shared<ClassType>(arg1, arg2, ...);
  • std::shared_ptr<ClassType> variableName (new ClassType(arg1, arg2, ...));
  • std::unique_ptr<ClassType> variableName = std::make_unique<ClassType>(arg1, arg2, ...); // C ++ 14
  • std::unique_ptr<ClassType> variableName (new ClassType(arg1, arg2, ...));

Observaciones

C ++ no es un lenguaje gestionado por la memoria. La memoria asignada dinámicamente (es decir, los objetos creados con new ) se "filtrará" si no se desasigna explícitamente (con delete ). Es responsabilidad del programador asegurarse de que la memoria asignada dinámicamente se libere antes de descartar el último puntero a ese objeto.

Los punteros inteligentes se pueden usar para administrar automáticamente el alcance de la memoria asignada dinámicamente (es decir, cuando la última referencia del puntero se sale del alcance, se elimina).

Los punteros inteligentes se prefieren a los punteros "sin procesar" en la mayoría de los casos. Hacen explícita la semántica de propiedad de la memoria asignada dinámicamente, comunicando en sus nombres si se pretende que un objeto sea compartido o de propiedad única.

Use #include <memory> para poder usar punteros inteligentes.

Punteros inteligentes Ejemplos relacionados