Por qué los punteros inteligentes sustituyen a new y delete sin formato
Comprenda RAII y por qué poseer punteros sin formato rara vez es correcto en el C++ moderno.
Por qué los punteros inteligentes sustituyen a new y delete sin formato es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
new y delete sin procesar
La herencia de C: new T reserva un T en el heap; delete lo libera. Debe hacer coincidir cada new con exactamente un delete; de lo contrario, se producirá una fuga de memoria o un fallo.
Widget* w = new Widget();
// ... use w ...
delete w; // forget this and you leakQué puede salir mal
Fallos habituales:
deleteolvidado: fuga de memoria- Segundo
delete: comportamiento indefinido - Excepción lanzada entre
newydelete: fuga de memoria - Devolver un puntero sin propietario claramente definido
RAII al rescate
La adquisición de recursos es inicialización: vincule la duración de un recurso a la duración de un objeto en la pila. El destructor libera el recurso, incluso si se lanza una excepción.
La idea de los punteros inteligentes
Un puntero inteligente es un pequeño envoltorio RAII alrededor de un puntero sin procesar. Su destructor llama a delete. Así nunca olvida liberar el recurso.
Los tres punteros inteligentes
Punteros inteligentes de la biblioteca estándar en <memory>:
std::unique_ptr<T>— propiedad exclusivastd::shared_ptr<T>— propiedad compartida mediante conteo de referenciasstd::weak_ptr<T>— observador sin propiedad de un shared_ptr
Los punteros inteligentes tienen poco coste
unique_ptr no tiene sobrecoste: tiene el mismo tamaño y velocidad que un puntero sin procesar. shared_ptr tiene el pequeño coste de un conteo atómico de referencias.
Se acabó el delete manual
Con los punteros inteligentes, casi nunca escribe delete. El destructor se encarga de ello.
#include <memory>
std::unique_ptr<Widget> w = std::make_unique<Widget>();
// no delete needed — when w goes out of scope, Widget is destroyedPunteros inteligentes y excepciones
Si se lanza una excepción a mitad de una función, las variables locales se destruyen en orden inverso. Los punteros inteligentes liberan sus recursos automáticamente; los punteros sin procesar producen fugas.
La propiedad está en el tipo
Ahora el tipo de puntero inteligente codifica la propiedad. Al leer la firma de una función puede saber quién es el propietario del objeto.
// I take ownership
void consume(std::unique_ptr<Widget> w);
// I look but do not own
void inspect(const Widget& w);Los punteros sin procesar siguen existiendo
Use punteros sin procesar (o referencias) para acceder sin adquirir la propiedad. Comunican que "toma prestado, no es propietario".
Reemplazar new con funciones make
Prefiera std::make_unique (C++14) y std::make_shared (C++11). Ofrecen seguridad frente a excepciones y son ligeramente más eficientes que llamar directamente a new.
auto w = std::make_unique<Widget>(42);
auto s = std::make_shared<Resource>("file.txt");Comprobación rápida
¿Cuál es la razón principal para usar std::unique_ptr en lugar de un par de new/delete sin procesar?
Repaso
El uso directo de new/delete es propenso a errores. Los punteros inteligentes envuelven los objetos reservados en el heap en gestores RAII que los liberan automáticamente. Prefiera std::make_unique y std::make_shared por seguridad y rendimiento.
Preguntas frecuentes
¿La lección «Por qué los punteros inteligentes sustituyen a new y delete sin formato» es gratis?
Sí — el texto completo de «Por qué los punteros inteligentes sustituyen a new y delete sin formato» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Por qué los punteros inteligentes sustituyen a new y delete sin formato»?
Comprenda RAII y por qué poseer punteros sin formato rara vez es correcto en el C++ moderno. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Por qué los punteros inteligentes sustituyen a new y delete sin formato»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué los punteros inteligentes sustituyen a new y delete sin formato
- unique_ptr y propiedad exclusiva
- shared_ptr y weak_ptr: propiedad compartida
- Eliminadores personalizados y funciones make