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];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 ++:
#incluirA 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 ().
#incluirA 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:
#incluirA 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 ++:
#incluirA 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:
#incluirO 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:
#incluirO 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.