BUSCAR
INDICE
INDICE DEL TEMA
OBJETIVOS
TEORIA
PALABRAS RESERVADAS
GLOSARIO
EJERCICIOS
RESUELTOS
AUTOEVALUACION
PROPUESTOS
ERRORES
ESTADISTICAS
INICIO
FAQS
LINKS
RECOMIENDANOS
QUIENES SOMOS
MAPA DEL WEB
COLABORAR
Tema 13 Más sobre Operadores
Teoría: Operadores: new y delete

Ya hemos visto en el tema de punteros que son los operadores para reservar y liberar dinamicamente memoria.

El operador new sirve para reservar memoria dinámica.

Sintaxis:

[::] new [<emplazamiento>] [(<inicialización>)]
[::] new [<emplazamiento>] () [(<inicialización>)]
[::] new [<emplazamiento>] [<número de elementos>]
[::] new [<emplazamiento>] ()[<número de elementos>]

El operador opcional :: está relacionado con la sobrecarga de operadores, que no hemos estudiado todavia y que por lo tanto, de momento no usaremos. Lo mismo sucede con el emplazamiento.

La inicialización, si aparece, se usará para asignar valores iniciales a la memoria reservada con new, pero no puede ser usada con arrays.

Las formas tercera y cuarta se usan para reservar memoria para arrays dinámicas.

La de la memoria reservada con new será válida hasta que se libere con delete o hasta el fin del programa. Aunque es aconsejable liberar siempre la memoria reservada con new
usando delete. Se considera una práctica sospechosa no hacerlo.

Si la reserva de memoria no tuvo éxito, new devuelve un puntero nulo, NULL.

El operador delete se usa para liberar la memoria dinámica reservada con new.

Sintaxis:

[::] delete [<expresión>]
[::] delete[] [<expresión>]

La expresión será normalmente un puntero, el operador delete[] se usa para liberar memoria de arrays dinámicas.

Es importante liberar siempre usando delete la memoria reservada con new. Existe el peligro de pérdida de memoria si se ignora esta regla (memory leaks).

Cuando se usa el operador delete con un puntero nulo, no se realiza ninguna acción. Esto permite usar el operador delete con punteros sin necesidad de preguntar si es nulo antes.

Repasa los ejemplos que vimos en el tema de punteros