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 cuandounique_ptrsale 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 últimoshared_ptrse elimina. -
std::weak_ptr— referencia débil a un objeto gestionado porshared_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
}