Programación en C++ – Punteros Inteligentes

Los punteros inteligentes son una característica importante de C++ moderno que facilita la gestión segura y eficiente de la memoria dinámica. Los punteros inteligentes son clases que se encargan automáticamente de la asignación y liberación de memoria, lo que ayuda a prevenir problemas comunes de gestión de memoria, como fugas de memoria.

En C++, hay tres tipos principales de punteros inteligentes proporcionados por la biblioteca estándar: std::unique_ptr, std::shared_ptr y std::weak_ptr.

1. std::unique_ptr: std::unique_ptr es un puntero inteligente que representa la propiedad única de un objeto en la memoria. Solo puede haber un std::unique_ptr que posea la memoria en un momento dado. Cuando el std::unique_ptr sale de ámbito o se elimina, se libera automáticamente la memoria asignada.

#include <iostream>
#include <memory>

int main() {
    std::unique_ptr<int> numPtr = std::make_unique<int>(42);
    std::cout << *numPtr << std::endl;

    // No se necesita llamar a delete explícitamente
    // La memoria se liberará automáticamente

    return 0;
}

2. std::shared_ptr: std::shared_ptr es un puntero inteligente que permite compartir la propiedad de un objeto entre varios std::shared_ptr. El objeto se libera automáticamente cuando no hay más std::shared_ptr que lo posean.

#include <iostream>
#include <memory>

int main() {
    std::shared_ptr<int> numPtr1 = std::make_shared<int>(42);
    std::shared_ptr<int> numPtr2 = numPtr1;

    std::cout << *numPtr1 << " " << *numPtr2 << std::endl;

    // La memoria se liberará automáticamente cuando todos los shared_ptr se hayan ido

    return 0;
}

3. std::weak_ptr: std::weak_ptr es un complemento de std::shared_ptr que no aumenta la cuenta de referencias. Permite la observación de objetos controlados por std::shared_ptr sin poseerlos. Es útil para prevenir referencias circulares que pueden provocar fugas de memoria.

#include <iostream>
#include <memory>

int main() {
    std::shared_ptr<int> numPtr = std::make_shared<int>(42);
    std::weak_ptr<int> weakPtr = numPtr;

    if (auto sharedPtr = weakPtr.lock()) {
        std::cout << *sharedPtr << std::endl;
    } else {
        std::cout << "La memoria ya fue liberada." << std::endl;
    }

    return 0;
}

Pueder ir al artículo principal:

Códigos Sencillos hechos en C++

2 thoughts on “Programación en C++ – Punteros Inteligentes

Deja un comentario