Excluindo a matriz em C ++

Excluindo a matriz em C ++
Este artigo é sobre como excluir uma matriz em c++. Também inclui a exclusão da matriz de ponteiro. Antes disso, deve -se afirmar que existem duas maneiras principais de criar uma matriz em C ++, que depende do tipo de memória usada. Quando um programa está em execução, recebe duas partes de memória: memória normal, que ele usa; e loja gratuita, que pode ou não usar. Uma matriz pode ser criada na memória normal ou em uma loja gratuita. As sintaxes para criar uma matriz na parte da memória são diferentes; Caso contrário, é a mesma matriz. As maneiras pelas quais eles podem ser excluídos também são diferentes.

Array comum

Uma matriz pode ser criada na memória normal da seguinte forma:

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

Para excluir esta matriz, deixe -a sair do escopo.

Array de loja grátis

Uma matriz pode ser criada dinamicamente, durante a execução do programa, em uma loja gratuita. Essa matriz pode ser criada da seguinte maneira:

char *ptr = novo char [5] 'p', 'q', 'r', 's', 't';

A mesma matriz pode ser criada na função principal do C ++ da seguinte forma:

char *ptr = novo char [5];
ptr [0] = 'p'; ptr [1] = 'q'; ptr [2] = 'r'; ptr [3] = 's'; ptr [4] = 't';

Nota do uso do operador, novo, aqui. O PTR é um ponteiro. ARR acima também é um ponteiro, mas foi abordado de um ângulo diferente. Para excluir esta matriz, use o operador, exclua [] como mostrado abaixo. A matriz na loja gratuita não pode ser excluída deixando -a sair do escopo. Então, ele deve ser excluído com o operador delete [].

Este artigo ilustra as diferentes maneiras de excluir uma matriz criada nas duas maneiras.

Conteúdo do artigo

- Excluindo a matriz comum

- Excluindo uma matriz de ponteiro criado dinamicamente

- Conclusão

Excluindo a matriz comum

Para excluir uma matriz comum, deixe -a sair do escopo. Embora a função principal () seja a função de capital de um programa C ++, ainda é uma função. No programa a seguir, uma matriz é criada em um escopo local aninhado (bloco) na função principal C ++:

#incluir
usando namespace std;
int main ()

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

A saída é, q. O escopo aninhado é o bloco do if-construir. A matriz foi criada neste bloco e usada no mesmo bloco imprimindo o segundo valor da matriz. No final do bloco, a variável da matriz morre. Se o indicador de comentário logo abaixo do bloco for removido, o programa não será compilado, uma mensagem de erro será emitida. Isso será porque a matriz morreu no final do bloco.

O programa a seguir ilustra uma coisa semelhante, mas em uma função, chamada fn ().

#incluir
usando namespace std;
void fn ()
char arr [] = 'p', 'q', 'r', 's', 't';
cout<
// arr [1] = 'u';
int main ()

fn ();
retornar 0;

A saída ainda está, q. Se o indicador de comentário logo abaixo do bloco de função for removido, o programa não será compilado e uma mensagem de erro será emitida. Isso será porque a matriz morreu no final do bloco de funções (escopo). Além disso, observe que a atribuição após a declaração não é permitida no escopo global.

Excluindo uma matriz de ponteiro criado dinamicamente

Como a atribuição após a declaração não é permitida no escopo global, a matriz na loja gratuita será feita em um escopo aninhado para o bloco de função principal C ++, ilustrado abaixo. O operador delete [] é usado no escopo aninhado, para excluir a matriz, como segue:

#incluir
usando namespace std;
int main ()

if (1 == 1)
char *ptr = novo char [5] 'p', 'q', 'r', 's', 't';
cout<excluir [] ptr;
cout<
retornar 0;

A saída é uma 'q', desde a primeira declaração de cout. Observe que o nome da matriz, PTR, como argumento (parâmetro) do operador de exclusão. A matriz, PTR para a loja gratuita, é declarada, usada e excluída com o operador "excluir [] ()" no mesmo escopo aninhado. Se for deixado sair do escopo, sem "excluir [] ptr", não seria realmente excluído porque está em uma loja livre. Essa matriz deve ser excluída em seu escopo, após o uso com o operador delete []. Excluindo com o operador Excluir [] deve ser feito para a matriz dinâmica para libertar a memória (evite vazamento de memória).

O programa a seguir, ilustra uma coisa semelhante, mas no escopo da função principal C ++:

#incluir
usando namespace std;
int main ()

char *ptr = novo char [5] 'p', 'q', 'r', 's', 't';
cout<excluir [] ptr;
retornar 0;

A saída ainda está, q como deveria, com o índice. Todo o código de interesse está diretamente na função principal do C ++. Embora a função principal () seja a função de capital de um programa C ++, ainda é uma função do escopo da função ou do bloco de funções.

Inclusão do cabeçalho da biblioteca

Como observado acima, nenhuma biblioteca foi incluída para o uso dos operadores novos ou de exclusão. No entanto, os operadores novos e excluídos estão na nova biblioteca, que é implicitamente incluída. Os operadores novos e excluíram são do escopo global. A biblioteca ainda pode ser incluída como no seguinte programa para matriz comum:

#incluir
#incluir
usando namespace std;
int main ()

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

O programa funciona sem nenhum problema. A biblioteca ainda pode ser incluída, como no programa a seguir, para matriz de ponteiro dinâmico na loja gratuita:

#incluir
#incluir
usando namespace std;
int main ()

if (1 == 1)
char *ptr = novo char [5] 'p', 'q', 'r', 's', 't';
cout<excluir [] ptr;

retornar 0;

O programa funciona sem nenhum problema. Nota: incluindo o novo cabeçalho (biblioteca) não é obrigatório.

Conclusão

Para excluir uma matriz comum, deixe -a sair do escopo. Para excluir uma matriz de ponteiro dinâmico de loja gratuita, use o operador, exclua [] Name, no mesmo escopo. O operador de exclusão da matriz pode ter um segundo e/ou terceiro argumento. No entanto, isso é discussão para algum outro momento.