Eliminazione dell'array in C ++

Eliminazione dell'array in C ++
Questo articolo è su come eliminare un array in c++. Include anche l'eliminazione dell'array di punta. Prima di allora, si deve affermare che ci sono due modi principali per creare un array in C ++, che dipende dal tipo di memoria utilizzata. Quando un programma è in esecuzione, vengono fornite due parti di memoria: memoria normale, che utilizza; e negozio gratuito, che può o meno utilizzare. Un array può essere creato nella memoria normale o in negozio gratuito. Le sintassi per creare un array in entrambe le porzioni di memoria sono diverse; Altrimenti, è lo stesso array. Anche i modi in cui possono essere eliminati sono diversi.

Array ordinario

Un array può essere creato nella memoria normale come segue:

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

Per eliminare questo array, lascialo andare fuori dalla portata.

Array di negozi gratuito

Un array può essere creato in modo dinamico, durante l'esecuzione del programma, nel negozio gratuito. Tale array può essere creato come segue:

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

Lo stesso array può essere creato nella funzione principale C ++ come segue:

char *ptr = new char [5];
ptr [0] = 'p'; PTR [1] = 'Q'; ptr [2] = 'r'; ptr [3] = 's'; ptr [4] = 't';

Nota dell'uso dell'operatore, nuovo, qui. Il PTR è un puntatore. ARR sopra è anche un puntatore ma è stato avvicinato da un angolo diverso. Per eliminare questo array, utilizzare l'operatore, eliminare [] come mostrato di seguito. L'array in negozio gratuito non può essere eliminato lasciandolo uscire dall'ambito. Quindi, deve essere eliminato con l'operatore Elimina [].

Questo articolo illustra i diversi modi di eliminare un array creato in due modi.

Contenuto dell'articolo

- Eliminazione di un array ordinario

- Eliminazione di puntatori creati dinamicamente di negozio gratuito

- Conclusione

Eliminazione di un array ordinario

Per eliminare un normale array, lascialo andare fuori portata. Sebbene la funzione principale () sia la funzione capitale di un programma C ++, è ancora una funzione. Nel seguente programma, un array viene creato in un ambito locale nidificato (blocco) nella funzione principale C ++:

#includere
Utilizzo dello spazio dei nomi std;
int main ()

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

L'output è, q. L'ambito nidificato è il blocco della costruzione IF. L'array è stato creato in questo blocco e utilizzato nello stesso blocco stampando il secondo valore dell'array. Alla fine del blocco, la variabile dell'array muore. Se viene rimosso l'indicatore di commento appena sotto il blocco, il programma non verrà compilato, verrà emesso un messaggio di errore. Questo sarà dovuto al fatto che l'array è morto alla fine del blocco.

Il seguente programma, illustra una cosa simile, ma in una funzione, chiamata fn ().

#includere
Utilizzo dello spazio dei nomi std;
void fn ()
char arr [] = 'p', 'q', 'r', 's', 't';
cout<
// arr [1] = 'u';
int main ()

fn ();
restituzione 0;

L'output è ancora, q. Se viene rimosso l'indicatore di commento appena sotto il blocco funzione, il programma non si compilerà e verrà emesso un messaggio di errore. Questo sarà dovuto al fatto che l'array è morto alla fine del blocco funzione (portata). Inoltre, si noti che l'assegnazione dopo la dichiarazione non è consentita nell'ambito globale.

Eliminazione di puntatori creati dinamicamente di negozio gratuito

Poiché l'assegnazione dopo la dichiarazione non è consentita nell'ambito globale, l'array nel negozio gratuito verrà eseguito in un ambito nidificato al blocco di funzioni principali C ++ che è illustrato di seguito. L'operatore ELETE [] viene utilizzato nell'ambito nidificato, per eliminare l'array, come segue:

#includere
Utilizzo dello spazio dei nomi std;
int main ()

if (1 == 1)
char *ptr = new char [5] 'p', 'q', 'r', 's', 't';
cout<elimina [] PTR;
cout<
restituzione 0;

L'output è una "Q", dalla prima istruzione Cout. Si noti che il nome dell'array, PTR, come argomento (parametro) dell'operatore di eliminazione. L'array, PTR per il negozio gratuito, viene dichiarato, utilizzato ed eliminato con l'operatore "Elimina [] ()" nello stesso ambito nidificato. Se viene lasciato fuori dall'ambito, senza "Elimina [] PTR", non sarebbe davvero eliminato perché è nel negozio gratuito. Tale array deve essere eliminato nel suo ambito, dopo l'uso con l'operatore Elimina []. L'eliminazione con l'operatore ELETE [] deve essere eseguita per l'array dinamico per liberare la memoria (evitare la perdita di memoria).

Il seguente programma illustra una cosa simile, ma nell'ambito della funzione principale C ++:

#includere
Utilizzo dello spazio dei nomi std;
int main ()

char *ptr = new char [5] 'p', 'q', 'r', 's', 't';
cout<elimina [] PTR;
restituzione 0;

L'output è ancora, Q come dovrebbe, con l'indice. Tutto il codice di interesse è direttamente nella funzione principale C ++. Sebbene la funzione principale () sia la funzione capitale di un programma C ++, è ancora una funzione dell'ambito di funzione o del blocco delle funzioni.

Inclusione dell'intestazione della biblioteca

Come notato sopra, nessuna libreria è stata inclusa per l'uso degli operatori nuovi o eliminati. Tuttavia, i nuovi e elimina gli operatori sono nella nuova libreria, che è implicitamente incluso. I nuovi e elimina gli operatori sono dell'ambito globale. La biblioteca può ancora essere inclusa come nel seguente programma per l'array ordinario:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

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

Il programma funziona senza alcun problema. La libreria può ancora essere inclusa, come nel seguente programma, per un array di puntatore dinamico nel negozio gratuito:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

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

restituzione 0;

Il programma funziona senza alcun problema. Nota: incluso il nuovo intestazione (biblioteca) non è obbligatorio.

Conclusione

Per eliminare un normale array, lascialo andare fuori portata. Per eliminare una matrice dinamica di puntatore di negozio gratuito, utilizzare l'operatore, eliminare [] ArrayName, nello stesso ambito. L'operatore elimina l'array può avere un secondo e terzo argomento. Tuttavia, questa è una discussione per qualche altra volta.