Inicia sesión


Curso De C++ - Capitulo 13

 

 
Operadores de manejo de memoria new y delete

Veremos su uso en el capítulo de punteros II y en mayor profundidad en el capítulo de clases y en operadores sobrecargados.

Operador new

El operador new sirve para reservar memoria dinámica.
Sintaxis:

 

[::]new [<emplazamiento>] <tipo> [(<inicialización>)] 
[::]new [<emplazamiento>] (<tipo>) [(<inicialización>)] 
[::]new [<emplazamiento>] <tipo>[<número_elementos>]
[::]new [<emplazamiento>] (<tipo>)[<número_elementos>]  

 

El operador opcional :: está relacionado con la sobrecarga de operadores, de momento no lo usaremos. Lo mismo se aplica a 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ámicos. 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 muy sospechosa no hacerlo.

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

Operador delete

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ámicos.

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

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.

De todos modos, es buena idea asignar el valor 0 a los punteros que no han sido inicializados y a los que han sido liberados. También es bueno preguntar si un puntero es nulo antes de intentar liberar la memoria dinámica que le fue asignada.

Nota: los operadores newdelete son propios de C++. En C se usan funciones, como malloc y free para reservar y liberar memoria dinámica y liberar un puntero nulo con free suele tener consecuencias desastrosas. 

Veamos algunos ejemplos:

 

   int main() {
   char *c; 
   int *i = NULL; 
   float **f; 
   int n;
 
   // Cadena de 122 más el nulo:
   c = new char[123];
   // Array de 10 punteros a float:
   f = new float *[10]; (1)
   // Cada elemento del array es un array de 10 float 
   for(n = 0; n < 10; n++) f[n] = new float[10]; (2)
   // f es un array de 10*10 
   f[0][0] = 10.32; 
   f[9][9] = 21.39; 
   c[0] = 'a'; 
   c[1] = 0; 
   // liberar memoria dinámica
   for(n = 0; n < 10; n++) delete[] f[n]; 
   delete[] f; 
   delete[] c; 
   delete i; 
   return 0; 
} 

Nota: f es un puntero que apunta a un puntero que a su vez apunta a un float. Un puntero puede apuntar a cualquier tipo de variable, incluidos otros punteros. 

 

Este ejemplo nos permite crear arrays dinámicos de dos dimensiones. La línea (1) crea un array de 10 punteros a float. La (2) crea 10 arrays de floats. El comportamiento final de f es el mismo que si lo hubiéramos declarado como:

float f[10][10]; 

Otro ejemplo:

#include <iostream>
using namespace std;

int main() {
   int *x;
 
   x = new int(67);
   cout << *x << endl;
   delete x;
} 

En este caso, reservamos memoria para un entero, se asigna la dirección de la memoria obtenida al puntero x, y además, se asigna el valor 67 al contenido de esa memoria.

Palabras reservadas usadas en este capítulo

delete, new.


  • Autor:
  • Editor: Tutoriales En Linea
  • Fecha:2015-05-16
  • Categorias: Noticias Tutorial Tutorial C++




Información
Usuarios que no esten registrados no pueden dejar comentarios, te invitamos a que te registre!






Crecimiento mundial en el mercado de software de diseño PCB para el 2020 - 2029

  • Autor:
  • Editor: Tutoriales En Linea
  • Fecha:2019-11-13
  • Categorias: Desarrolladores Lenguajes De Programacion Software Noticias Tutorial

Historia de los sistemas operativos

  • Autor:
  • Editor: Tutoriales En Linea
  • Fecha:2019-11-12
  • Categorias: Microsoft Windows Apple Ordenador Noticias Tutorial Informatica

Vacía tu mente, no tengas forma, ni figura

  • Autor:
  • Editor: Tutoriales En Linea
  • Fecha:2019-11-12
  • Categorias: Estilo Noticias Tutorial

Curso de iniciación de JavaScript

  • Autor:
  • Editor: Tutoriales En Linea
  • Fecha:2019-10-21
  • Categorias: Lenguajes De Programacion javascript Cursos Noticias Tutorial

Cómo insertar código JavaScript

  • Autor:
  • Editor: Tutoriales En Linea
  • Fecha:2019-10-21
  • Categorias: Lenguajes De Programacion javascript Cursos Noticias Tutorial

Expresiones JavaScript para especificar valores de atributos en HTML

  • Autor:
  • Editor: Tutoriales En Linea
  • Fecha:2019-10-21
  • Categorias: Lenguajes De Programacion javascript Cursos Noticias Tutorial