Non capisco il punto di memoria allocata dinamicamente e spero che voi ragazzi siate più chiari per me.Memoria allocata dinamicamente al C++
Prima di tutto, ogni volta che allochiamo memoria otteniamo semplicemente un puntatore a quella memoria.
int * dynInt = new int;
Allora, qual è la differenza tra il fare quello che ho fatto sopra e:
int someInt;
int* dynInt = &someInt;
Se ho ben capito, in entrambi i casi memoria viene allocata per un int, e si ottiene un puntatore a quella memoria.
Quindi qual è la differenza tra i due. Quando è preferito un metodo all'altro.
ulteriormente più il motivo per cui ho bisogno di liberare la memoria con
delete dynInt;
nel primo caso, ma non nel secondo caso.
mie supposizioni sono:
Quando l'allocazione dinamica della memoria per un oggetto, l'oggetto non viene inizializzato, mentre se si fa qualcosa di simile nel secondo caso, l'ottenere l'oggetto del inizializzato. Se questa è l'unica differenza, c'è una motivazione dietro a questo, a parte il fatto che allocare dinamicamente la memoria è più veloce.
La ragione per cui non è necessario utilizzare delete per il secondo caso è perché il fatto che l'oggetto sia stato inizializzato crea una sorta di routine di distruzione automatica.
Queste sono solo supposizioni che mi piacerebbe se qualcuno mi correggesse e chiarisse le cose per me.
Se non sei sicuro, segui la semplice regola: "Non usare mai puntatori, non usare mai" nuovo "." Una volta compresa la necessità di una durata dell'oggetto gestita manualmente, saprai quando interrompere questa regola. –
Uhm posso sollecitare vivamente l'utente ad aprire un libro sull'ambito delle variabili C++ .., la gestione dinamica della memoria viene generalmente discussa nel 4 ° o 5 ° capitolo di qualsiasi libro per principianti C++. @KerrekSB Non direi questo .. Soprattutto in questo caso l'incertezza non deriva dall'ambiguità, ma piuttosto da non abbastanza conoscenza - se non sei sicuro assicurati di aver letto abbastanza in modo da essere SICURO. – paul23
L'allocazione dinamica della memoria è in genere _slower_ e l'inizializzazione non ha nulla a che fare con tutto ciò. –