es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función de puntero C++ y palabra clave “new”

Buen día,

En general, encuentro que es mejor mirar el código de otras personas cuando intento aprender un lenguaje de programación.

Ahora estoy tratando de aprender C++, pero tengo algunas dificultades para entender la siguiente función (como ejemplo):

Vehicle* MyClass::GetVehicleByID(uint id)
{
Vehicle* car = new Vehicle;
car->model = vehiclesArray[id].model;
return car;
}

int main()
{
Vehicle* car = myClass.GetVehicleID(0);
std::cout << “Modelo de coche: ” << car->model << std::endl;
}

Creo que entiendo el concepto de los punteros, pero no entiendo cuándo se destruirá este objeto. ¿Tendré que eliminar manualmente el objeto “car” en la función principal? Además, ¿por qué estamos usando la palabra clave “new” en lugar de simplemente usar “Vehicle car();”? Según entiendo, la palabra clave “new” asignará memoria antes de poblarla con el objeto.

¿Estoy completamente fuera de mi capacidad al hacer estas preguntas? ¿Dónde o cómo puedo aprender a entender lo que está sucediendo en este código? Porque parece que todos los tutoriales solo explican lo “básico”, como lo que es un puntero y la manera más básica de usarlos.

Cualquier ayuda sería muy apreciada.

Tags:  

Answer

  1. Avatar for davy.ai

    ¡Hola!

    Es genial que estés intentando aprender C++ y mirando el código de otras personas como guía. Déjame intentar responder tus preguntas lo mejor que pueda:

    1. ¿Cuándo se destruirá el objeto?
      • El objeto creado con “new” en la función GetVehicleByID no se destruirá automáticamente. Persistirá en la memoria hasta que se elimine manualmente con “delete” o hasta que el programa se cierre. Esto puede provocar pérdidas de memoria si no se gestiona correctamente. En este caso, como el objeto se devuelve al llamante, es responsabilidad del llamante eliminarlo.
    2. ¿Tengo que eliminar manualmente el objeto “car” en la función principal?
      • Sí, es una buena práctica eliminar el objeto después de que se haya completado su uso. En la función principal, deberías agregar “delete car;” después de imprimir el modelo del coche.
    3. ¿Por qué usar “new” en lugar de simplemente “Vehicle car();”?
      • Usar “new” asigna memoria dinámicamente en el montón para el objeto, lo que permite más flexibilidad en la gestión del tiempo de vida del objeto. Si se usara “Vehicle car();” en su lugar, el objeto se crearía en el stack y se destruiría automáticamente cuando saliera del ámbito. Sin embargo, esto no sería posible en casos en los que el objeto necesitara sobrevivir a su creador o ser pasado a otras funciones fuera de su ámbito.

    Es perfectamente normal tener preguntas y buscar un mayor entendimiento. Aprender a programar puede ser abrumador a veces, ¡pero no te rindas! Algunos recursos recomendados para profundizar en C++11 incluyen los siguientes:

    • El Lenguaje de Programación C++ (4.ª Edición) por Bjarne Stroustrup
    • C++ Moderno y Efectivo por Scott Meyers
    • Tutoriales en LearnCpp.com

    ¡Sigue aprendiendo y feliz programación!

Comments are closed.