Sobes.tech
Junior — Middle

¿Cuáles son las principales dificultades o trampas relacionadas con el uso de punteros inteligentes en programación?

sobes.tech AI

Respuesta de la IA

Las principales dificultades al usar punteros inteligentes:

  • Referencias cíclicas: si dos objetos se poseen mutuamente a través de shared_ptr, nunca se liberarán, causando una fuga de memoria. Para resolverlo, se usa weak_ptr.
  • Uso incorrecto de unique_ptr: intentar copiar un unique_ptr resultará en un error, se debe usar movimiento.
  • Sobrecarga de recursos: la creación y destrucción frecuente de punteros inteligentes puede afectar el rendimiento.
  • Poder de propiedad no evidente: con un diseño incorrecto, es difícil entender quién posee el objeto y cuándo será destruido.

Ejemplo de referencia cíclica:

struct B; 
struct A {
    std::shared_ptr<B> b_ptr;
};
struct B {
    std::shared_ptr<A> a_ptr;
};

// Esto creará un ciclo, los objetos no serán eliminados automáticamente.

Para evitarlo, se usa std::weak_ptr en uno de los lados.