C ++ Nuovo operatore

C ++ Nuovo operatore
Copriremo come gestire in modo efficiente l'allocazione in C ++ utilizzando la funzione "nuova" attraverso l'uso di esempi pratici.

In C ++, il termine "distribuzione della memoria dinamica" si riferisce all'assegnazione manuale della memoria da parte di un programmatore. Heap è dove viene distribuita la memoria condivisa distribuita, mentre lo stack è dove le variabili non statiche e locali acquisiscono risorse di memoria.

Applicazioni

  • Allocazione di archiviazione di dimensioni dinamiche, che non è realizzabile con l'archiviazione allocata del compilatore oltre a vari array, è un utilizzo di allocazione della memoria dinamica.
  • Il vantaggio principale è la versatilità che offre ai programmatori. Abbiamo un'autonomia assoluta per allocare e rilasciare la memoria secondo necessità e non più necessario. Questa versatilità è utile in molte situazioni.

In che modo C ++ alloca e si affida la memoria?

I metodi Malloc () e Calloc () in C ++ vengono utilizzati per cambiare la memoria dinamicamente durante l'esecuzione. Mentre il metodo gratuito () viene utilizzato per rilasciare la memoria che è stata assegnata. Questi metodi sono forniti da C ++ insieme ai due operatori "nuovi" e "elimina" che rendono l'allocazione della memoria e il rilascio più semplice ed efficiente.

La correlazione tra la "nuova" parola chiave e il nuovo operatore "nuovo"

Queste due cose sono diverse l'una dall'altra.

Si svolgono due eventi: distribuzione della memoria e formazione di oggetti. Entrambi sono gestiti dalla "nuova" parola chiave. Chiamare l'operatore e chiamare il costruttore stesso sono le procedure per allocare l'archiviazione. L'operatore "nuovo" non si assumerà alcuna responsabilità per invocare il costruttore, ma consente di regolare la strategia di allocazione di archiviazione. La nuova parola chiave ha questa responsabilità. Chiamare il costruttore senza usare l'operatore nuovo è fattibile.

Nuovo operatore

L'allocazione della domanda di memoria sull'archiviazione aperta è indicata dal nuovo operatore. Se è accessibile una memoria sufficiente, un nuovo operatore elabora i dati. Quindi, inizializzalo e fornisce all'oggetto puntatore l'indirizzo della memoria recentemente assegnata e configurata.

Esempio 1

Eseguiamo questo codice per mostrare come utilizzare gli operatori nuovi e eliminati; La memoria verrà allocata e rilasciata dinamicamente.

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

int* a = null;
a = new (nothrow) int;
Se (!UN)
cout << "Memory is not allocated\n";
altro

*a = 45;
cout << "Value of a: " << *a << endl;

float *c = nuovo float (67.84);
cout << "Value of c: " << *c << endl;
int x = 6;
int *b = new (nothrow) int [x];
Se (!B)
cout << "Memory is not allocated\n";
altro

per (int j = 0; j < x; j++)
B [J] = J+1;
cout << "A chunk of memory containing values: ";
per (int j = 0; j < x; j++)
cout << b[j] << " ";

Elimina a;
Elimina C;
elimina [] b;
restituzione 0;

Le librerie richieste sarebbero integrate. Successivamente, lo spazio dei nomi standard verrà aggiunto come "std". Qui, la funzione principale () verrebbe invocata. Inizializzeremmo un puntatore e imposteremmo questo puntatore su 'null'. Chiediamo di archiviare le variabili utilizzate per un "nuovo" operatore. Il tipo di dati di "A" sarà "intero". La condizione "if-else" si applicherebbe. Se la condizione definita è soddisfatta, l'istruzione "cout" visualizzerà la "memoria del testo non viene allocata". Altrimenti, memorizzeremmo il valore del puntatore.

Quindi, il comando "cout" mostra il valore del puntatore. Ora richiederemmo un blocco di memoria utilizzando il "nuovo" operatore. Specifichiamo il valore a virgola mobile della variabile "C" utilizzando il "nuovo" operatore. Ora, il "cout" stamperà il valore della variabile "C". Qui, specifichiamo la dimensione del blocco della memoria. Dichiariamo una variabile "X" e impostiamo il suo tipo di dati come "intero". Costruiamo un nuovo puntatore chiamato "B" e ne forniamo il valore utilizzando il "nuovo" operatore.

Ancora una volta, verrà utilizzata la condizione "if-else". All'interno dell'affermazione "else" abbiamo usato l'affermazione "per". Inizialmente, la variabile loop 'J' verrebbe dichiarata e definiamo la condizione. Quindi, aumentiamo il valore della variabile loop di 1. Il comando "cout" verrebbe utilizzato per stampare la riga "un pezzo di memoria contenente valori". Ancora una volta, impiegheremo il ciclo "per".

Ora libereremo la memoria assegnata mediante l'utilizzo dell'operatore "Elimina". Prima di aggiungere il comando "return 0", liberemo il blocco della memoria allocata utilizzando l'array.

Acquisiamo questo tipo di risultato dopo aver eseguito il programma sopra menzionato.

Esempio 2

In questo caso, utilizzeremo il "nuovo" operatore per oggetti diversi.

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

int *l = null;
l = new int ();
int *v = new int (23);
Se(!l)

cout<<"bad memory allocation"<
altro

cout<<"memory allocated successfully"<*l = 20;
cout<<"*l = "<<*l<cout<<"*v = "<<*v<
doppio *arr = null;
arr = new Double [20];
Se(!arr)
Cout<<"memory not allocated"<altro

per (int k = 0; k<20;k++)
arr [k] = k+1;
cout<<"arr values : ";
per (int k = 0; k<20;k++)
cout<< arr[k]<<"\t";

Elimina L;
Elimina V;
elimina [] arr;
restituzione 0;

Nell'illustrazione è l'integrazione delle biblioteche necessarie . Successivamente, verrà aggiunto lo spazio dei nomi noto come "std". Il metodo principale () verrebbe chiamato. Per inizializzare un puntatore, lo imposteremmo su "NULL."Il valore della variabile" i "utilizzata per l'operatore" nuovo "verrebbe archiviato qui. Il tipo di dati di questa variabile è "intero."Verrà utilizzata la condizione" if-else ". Se la condizione specificata viene soddisfatta, il testo "Allocazione di memoria cattiva" verrà visualizzata dall'istruzione "Cout". In caso contrario, mantenere il valore del puntatore.

Quindi, il testo "memoria allocato correttamente" viene visualizzato utilizzando il comando "cout". Il valore del puntatore sarebbe impostato. Il valore del puntatore verrebbe visualizzato dal comando 'cout'. Abbiamo inizializzato l'array con il tipo di dati "doppio" e gli abbiamo dato il valore "null."Utilizzando il" nuovo "operatore, definiamo il valore di questo array. Utilizza un'istruzione "if-else". Quando la condizione viene soddisfatta, il comando "cout" stampica "memoria non allocata."; Altrimenti, abbiamo usato dichiarazioni nidificate "per".

Prima di definire la condizione, la variabile loop "J" sarebbe prima specificata. Successivamente, aggiungiamo 1 al valore di 'J'. I valori dell'array verrebbero stampati usando il comando "cout". Useremmo di nuovo il loop "per". Ora utilizzeremo l'operatore Elimina. Rilasciamo la memoria che è stata assegnata. Rilasciamo il blocco della memoria allocata utilizzando l'array prima di aggiungere l'istruzione "return 0".

Dopo aver implementato il codice sopra menzionato, otteniamo il risultato desiderato.

Conclusione

L'uso del "nuovo operatore" è al centro di questo articolo. Per i tipi di dati definiti dall'utente in classi e altri tipi di dati, utilizzeremo il "nuovo" operatore. Abbiamo eseguito due esempi relativi a questo argomento. Il primo esempio dimostra come utilizzare il "nuovo" operatore di C ++. L'ultima illustrazione mostra come applicare l'operatore "nuovo" agli oggetti.