Eliminar la matriz en C ++

Eliminar la matriz en C ++
Este artículo es sobre cómo eliminar una matriz en C++. También incluye la eliminación de la matriz del puntero. Antes de eso, debe declararse que hay dos formas principales de crear una matriz en C ++, que depende del tipo de memoria utilizada. Cuando se ejecuta un programa, se le da dos porciones de memoria: memoria normal, que usa; y tienda gratuita, que puede o no usar. Se puede crear una matriz en la memoria normal o en la tienda gratuita. Las sintaxis para crear una matriz en cualquiera de las partes de memoria son diferentes; de lo contrario, es la misma matriz. Las formas en que se pueden eliminar también son diferentes.

Matriz ordinaria

Se puede crear una matriz en la memoria normal de la siguiente manera:

char arr [] = 'p', 'q', 'r', 's', 't';

Para eliminar esta matriz, solo déjelo salir del alcance.

Matriz de tiendas gratis

Se puede crear una matriz dinámicamente, durante la ejecución del programa, en la tienda gratuita. Tal matriz se puede crear de la siguiente manera:

char *ptr = new Char [5] 'P', 'Q', 'r', 's', 't';

La misma matriz se puede crear en la función principal de C ++ de la siguiente manera:

char *ptr = nuevo char [5];
ptr [0] = 'P'; ptr [1] = 'Q'; ptr [2] = 'r'; ptr [3] = 's'; ptr [4] = 't';

Nota del uso del operador, nuevo, aquí. El PTR es un puntero. ARR arriba también es un puntero, pero se abordó desde un ángulo diferente. Para eliminar esta matriz, use el operador, elimine [] como se muestra a continuación. La matriz en la tienda gratuita no se puede eliminar dejando que salga del alcance. Entonces, debe eliminarse con el operador Eliminar [].

Este artículo ilustra las diferentes formas de eliminar una matriz creada de las dos maneras.

Contenido del artículo

- Eliminar la matriz ordinaria

- Eliminar la matriz de puntero creada dinámicamente de la tienda gratuita

- Conclusión

Eliminar la matriz ordinaria

Para eliminar una matriz ordinaria, solo déjelo salir del alcance. Aunque la función Main () es la función de capital de un programa C ++, sigue siendo una función. En el siguiente programa, se crea una matriz en un alcance local anidado (bloque) en la función principal de C ++:

#incluir
usando el espacio de nombres STD;
int main ()

if (1 == 1)
char arr [] = 'p', 'q', 'r', 's', 't';
cout<
// cout<regresar 0;

La salida es, Q. El alcance anidado es el bloque de la construcción if. La matriz se creó en este bloque y se usó en el mismo bloque imprimiendo el segundo valor de la matriz. Al final del bloque, la variable de matriz muere. Si se elimina el indicador de comentarios justo debajo del bloque, el programa no se compilará, se emitirá un mensaje de error. Esto se debe a que la matriz murió al final del bloque.

El siguiente programa ilustra algo similar, pero en una función, llamado fn ().

#incluir
usando el espacio de nombres STD;
vacío fn ()
char arr [] = 'p', 'q', 'r', 's', 't';
cout<
// arr [1] = 'u';
int main ()

fn ();
regresar 0;

La salida está quieta, Q. Si se elimina el indicador de comentarios justo debajo del bloque de funciones, el programa no se compilará y se emitirá un mensaje de error. Esto se debe a que la matriz murió al final del bloque de funciones (alcance). Además, tenga en cuenta que la asignación después de la declaración no está permitida en el alcance global.

Eliminar la matriz de puntero creada dinámicamente de la tienda gratuita

Dado que la asignación después de la declaración no está permitida en el alcance global, la matriz en la tienda gratuita se realizará en un alcance anidado al bloque de función principal de C ++ que se ilustra a continuación. El operador Delete [] se usa en el alcance anidado, para eliminar la matriz, de la siguiente manera:

#incluir
usando el espacio de nombres STD;
int main ()

if (1 == 1)
char *ptr = new Char [5] 'P', 'Q', 'r', 's', 't';
cout<eliminar [] ptr;
cout<
regresar 0;

La salida es una 'Q', desde la primera declaración de cout. Tenga en cuenta que el nombre de la matriz, PTR, como argumento (parámetro) del operador Eliminar. La matriz, PTR para la tienda gratuita, se declara, se usa y se elimina con el operador "Eliminar [] ()" en el mismo alcance anidado. Si se deja pasar del alcance, sin "eliminar [] PTR", realmente no se eliminaría porque está en la tienda gratis. Dicha matriz debe eliminarse en su alcance, después de su uso con el operador Eliminar []. Eliminar con el operador Eliminar [] debe hacerse para la matriz dinámica para liberar la memoria (evite la fuga de memoria).

El siguiente programa ilustra algo similar, pero en el alcance de la función principal de C ++:

#incluir
usando el espacio de nombres STD;
int main ()

char *ptr = new Char [5] 'P', 'Q', 'r', 's', 't';
cout<eliminar [] ptr;
regresar 0;

La salida está quieta, Q como debería, con el índice. Todo el código de interés está directamente en la función principal de C ++. Aunque la función Main () es la función de capital de un programa C ++, sigue siendo una función del alcance o bloque de función de la función.

Inclusión del encabezado de la biblioteca

Como se señaló anteriormente, no se ha incluido ninguna biblioteca para el uso de los operadores nuevos o de eliminación. Sin embargo, los operadores New y Elimete están en la nueva biblioteca, que se incluye implícitamente. Los operadores nuevos y de eliminación son del alcance global. La biblioteca aún se puede incluir como en el siguiente programa para la matriz ordinaria:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

if (1 == 1)
char arr [] = 'p', 'q', 'r', 's', 't';
cout<
// cout<regresar 0;

El programa funciona sin ningún problema. La biblioteca aún se puede incluir, como en el siguiente programa, para una matriz de puntero dinámico en la tienda gratuita:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

if (1 == 1)
char *ptr = new Char [5] 'P', 'Q', 'r', 's', 't';
cout<eliminar [] ptr;

regresar 0;

El programa funciona sin ningún problema. Nota: incluir el nuevo encabezado (biblioteca) no es obligatorio.

Conclusión

Para eliminar una matriz ordinaria, solo déjelo salir del alcance. Para eliminar una matriz de puntero dinámico de la tienda gratuita, use el operador, elimine [] ArrayName, en el mismo alcance. El operador de eliminación de matrices puede tener un segundo y/o tercer argumento. Sin embargo, eso es discusión por otro tiempo.