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 usaweak_ptr. - Uso incorrecto de
unique_ptr: intentar copiar ununique_ptrresultará 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.