0Pricing
C++ Academy · Lección

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 leak

Qué puede salir mal

Fallos habituales:

  • delete olvidado: fuga de memoria
  • Segundo delete: comportamiento indefinido
  • Excepción lanzada entre new y delete: 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 exclusiva
  • std::shared_ptr<T> — propiedad compartida mediante conteo de referencias
  • std::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 destroyed

Punteros 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

  1. Por qué los punteros inteligentes sustituyen a new y delete sin formato
  2. unique_ptr y propiedad exclusiva
  3. shared_ptr y weak_ptr: propiedad compartida
  4. Eliminadores personalizados y funciones make
← Volver a C++ Academy