Sobes.tech
Junior — Middle

¿Qué tipos de punteros inteligentes existen en C++?

sobes.tech AI

Respuesta de la IA

En C++ existen varias principales variedades de punteros inteligentes que ayudan a gestionar la duración de vida de los objetos y prevenir fugas de memoria:

  • std::unique_ptr — proporciona propiedad exclusiva del objeto. El objeto se destruye cuando unique_ptr sale del ámbito. No se puede copiar, pero sí mover.

  • std::shared_ptr — implementa conteo de referencias. Varios punteros pueden poseer un mismo objeto, que se destruye cuando el último shared_ptr se elimina.

  • std::weak_ptr — referencia débil a un objeto gestionado por shared_ptr. No afecta la duración de vida del objeto, se usa para prevenir referencias cíclicas.

Ejemplo de uso:

#include <memory>
#include <iostream>

int main() {
    std::unique_ptr<int> p1 = std::make_unique<int>(42);
    // std::unique_ptr<int> p2 = p1; // Error de copia
    std::unique_ptr<int> p2 = std::move(p1); // Movimiento de propiedad

    std::shared_ptr<int> sp1 = std::make_shared<int>(100);
    std::shared_ptr<int> sp2 = sp1; // El conteo de referencias aumenta

    std::weak_ptr<int> wp = sp1; // No aumenta el contador de referencias

    std::cout << *sp2 << std::endl; // 100
}