Duda sobre la instancias

Buenas a todos, me surge una gran duda, y resulta que buscando en google no encuentro nada relacionado con lo que mi cabeza pretende;

Por ejemplo creando una clase, o una libreria para hacer uso de esa clase o libreria

inicializariamos una instancia para poder acceder a lo que esta contenga, pero

¿Es posible crear una instancia de esa clase en tiempo de ejecución sin haberla creado o inicializado con anterioridad?

Gracias de antemano

mandragoratools:
¿Es posible crear una instancia de esa clase en tiempo de ejecución sin haberla creado o inicializado con anterioridad?

De hecho sí, un claro ejemplo está en la función open de la librería SD, el cuál crea un objeto File y retorna la referencia (puntero) de este.

De lo que no estoy seguro, es de qué pasa si no queda espacio para almacenar ese objeto; sí el programa se cuelga, o simplemente queda con referencia NULL (false en contexto booleano)

Hola mandragoratools
Dices en tupost:
Por ejemplo creando una clase, o una libreria para hacer uso de esa clase o libreria
inicializariamos una instancia para poder acceder a lo que esta contenga, pero
¿Es posible crear una instancia de esa clase en tiempo de ejecución sin haberla creado o inicializado con anterioridad?

y no me queda clara tu pregunta. ¿ Cuando dices “sin haberla creado” a que te refieres ?
Porque si no has creado la clase/libreria es evidente que no la vas a poder usar.
Pero si lo que no has creado es una instancia de esa clase, la respuesta (como te dice Lucario488, que sí).
De hecho no se pueden crear instancias de una clase si no es en tiempo de ejecucion.
Puedes crear las instancias que necesites sin mas que usar nombres distintos.
Por otro lado si al intentar instanciar una clase nos encontramos con que no hay memoria suficiente, el programa dará un run time error y devolverá el control al sistema operativo, pero en nuestro Arduino al no haber ningun sistema operativo, quizás se vuelva “loco” haciendo cosas raras.
No lo sé.

Alfaville:
pero en nuestro Arduino al no haber ningun sistema operativo, quizás se vuelva "loco" haciendo cosas raras.

Ahhh, duda aclarada.

Eso de "volverse loco" básicamente es un cuelgue del programa; en el sentido en que se "bloquea" o "congela", hasta al punto en que ni las interrupciones (excepto el reset por hardware o watchdog) se disparan.

Es posible, pero yo no lo he podido determinar.

Bueno. Ahondando un poco mas en el tema he visto lo siguiente:

  • El clock del microcontrolador no se detiene.
  • Al ser una estructura Harvard el programa siempre corre en FLASH
  • La naturaleza de la FLASH impide que se pueda escribir desde dentro del propio programa
  • Todos los vectores de interrupciones estan en la FLASH
  • El contador de programa (Program Counter) no es directamente accesible por ninguna instrucción

Por lo tanto:

  • El programa sigue corriendo porque siempre ejecuta codigos de operacion ya que no se puede sobreescribir el PC por error.
  • Lo unico que puede corromperse, por lo tanto, son la memoria SRAM y los registros (PORT’s y demás)
  • Lo bucles en general (for(), while(), etc) tienen probabilidades de quedarse “colgados”.
  • Los saltos condicionales (if-else, switch-case, etc) funcionarian aunque probablemente mal.
  • Pero las interrupciones funcionarian casi seguro (quizás con informacion corrompida) porque, como dijimos sus vectores están en FLASH y no cambian.

A la vista de todo lo cual:

  • Me inclino porque “se volveria loco”.

Jó. Vaya tochazo. Disculpad que me haya apartado del topico del hilo.