0Pricing
C++ Academy · Lección

Cuándo usar punteros frente a referencias

Elija entre punteros y referencias según la opcionalidad y la semántica de propiedad.

Cuándo usar punteros frente a referencias es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 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.

Herramientas distintas para tareas distintas

Las referencias y los punteros permiten acceder indirectamente a otro objeto, pero tienen semánticas diferentes. Utilice cada uno donde resulte más adecuado.

Referencias para destinos obligatorios

Una referencia no puede ser nula ni puede volver a vincularse. Utilice un parámetro de referencia cuando la función siempre necesite un objeto real.

void render(const Image& img);   // must have an image

Punteros para destinos opcionales

Un puntero puede ser nulo. Utilice un puntero cuando el argumento sea realmente opcional.

void render(const Image* img);   // nullptr means "skip"

Punteros cuando necesita reasignar

Los punteros pueden redirigirse a objetos diferentes. Utilícelos cuando la indirección cambie durante el algoritmo, por ejemplo, para representar un cursor móvil o el nodo actual.

Node* current = head;
while (current) {
    process(current);
    current = current->next;
}

¿Referencias para contenedores de referencias?

No puede tener un std::vector<T&>. Utilice std::vector<std::reference_wrapper<T>> o almacene punteros.

Devolver referencias

Devuelva una referencia cuando el resultado sobreviva a la llamada y el llamador pueda utilizarlo directamente, como ocurre con los miembros y los elementos de contenedores.

std::string& Person::name() { return name_; }

Devolver punteros

Devuelva un puntero cuando la función pueda no devolver ningún resultado o cuando la propiedad no esté clara. En el código moderno, prefiera std::optional o los punteros inteligentes.

Miembros de clase

Almacenar una referencia como miembro fija el objeto referido durante toda la vida del objeto y prohíbe la asignación mediante copia. Los miembros que son punteros son más flexibles, pero requieren comprobaciones de valores nulos.

Polimorfismo

Tanto los punteros como las referencias pueden utilizarse para el polimorfismo. Almacene punteros a la clase base en contenedores (un vector no puede contener referencias) y utilice referencias como parámetros cuando el valor nulo no sea válido.

Los punteros inteligentes son mejores propietarios

Utilice punteros sin formato únicamente para la indirección sin propiedad. La propiedad debe corresponder a std::unique_ptr o std::shared_ptr.

Guía rápida para decidir

Guía rápida:

  • Siempre hay un objeto válido → referencia
  • Puede no existir → puntero o std::optional
  • La indirección cambia → puntero
  • Es propietario de la memoria → puntero inteligente
  • Está en un contenedor → puntero (los vectores de referencias son poco prácticos)

Comprobación rápida

¿Cuál es el mejor tipo de parámetro para una función que requiere un objeto no nulo?

Resumen

Utilice referencias para destinos obligatorios y fijos, y punteros para destinos opcionales o móviles. Para la propiedad, prefiera los punteros inteligentes. Los contenedores normalmente necesitan punteros, no referencias.

Preguntas frecuentes

¿La lección «Cuándo usar punteros frente a referencias» es gratis?

Sí — el texto completo de «Cuándo usar punteros frente a referencias» 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 «Cuándo usar punteros frente a referencias»?

Elija entre punteros y referencias según la opcionalidad y la semántica de propiedad. 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 4 de 4.

¿Cuánto tiempo toma la lección «Cuándo usar punteros frente a referencias»?

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. Punteros sin formato y operador de dirección
  2. Desreferenciación y aritmética de punteros
  3. nullptr y seguridad frente a punteros nulos
  4. Cuándo usar punteros frente a referencias
← Volver a C++ Academy