Urgente, rispondete in fretta che ho un esame fra mezz'ora
salve il problema è con la memoria dinamica:
nel momento in cui te in c++ allochi dinamicamente degli oggetti come ad esempio una classe da te definita, alla fine del programma[dopo che esso è stato chiuso] tale memoria viene cancellata dal sistema operativo o la devi cancellare esplicitamente con un delete??e se è la prima, se a sua volta questi oggetti hanno dei puntatori esse devono avere dei distruttori definiti[sempre considerando che sia il so a cancellare la memoria] o fa tutto lui??
nel momento in cui te in c++ allochi dinamicamente degli oggetti come ad esempio una classe da te definita, alla fine del programma[dopo che esso è stato chiuso] tale memoria viene cancellata dal sistema operativo o la devi cancellare esplicitamente con un delete??e se è la prima, se a sua volta questi oggetti hanno dei puntatori esse devono avere dei distruttori definiti[sempre considerando che sia il so a cancellare la memoria] o fa tutto lui??
Risposte
La memoria viene deallocata alla chiusura dell'applicazione ma è comunque sempre buona abitudine quella di deallocare la memoria esplicitamente con delete alla fine dell'uso.
ringrazio moltissimo per la pronta disponibilitàXD
@apatriarca non capisco però cosa tu intenda per buona programmazione ovvero, spesso questo è un modo di dire che si utilizza per rappresentare un metodo di programmazione standard che garantisce alcune qualità quali stabilità chiarezza del codice e correttezza di ogni passaggio(oltre al normale funzionamento dell'algoritmo che anche un codice mal programmato per definizione deve soddisfare per chiamarsi tale). Mi chiedo dunque, in cosa mettere i delete alla fine migliora una di queste caratteristiche(o altre che magari mi saprai indicare)?ti rinnovo i ringraziamenti per il pronto aiuto e ti ringrazio in antici per la tua eventuale ulteriore risposta
@apatriarca non capisco però cosa tu intenda per buona programmazione ovvero, spesso questo è un modo di dire che si utilizza per rappresentare un metodo di programmazione standard che garantisce alcune qualità quali stabilità chiarezza del codice e correttezza di ogni passaggio(oltre al normale funzionamento dell'algoritmo che anche un codice mal programmato per definizione deve soddisfare per chiamarsi tale). Mi chiedo dunque, in cosa mettere i delete alla fine migliora una di queste caratteristiche(o altre che magari mi saprai indicare)?ti rinnovo i ringraziamenti per il pronto aiuto e ti ringrazio in antici per la tua eventuale ulteriore risposta
Quello che intendevo dire era che la memoria dovrebbe essere deallocata sempre subito dopo l'uso. Supponiamo ad esempio che tu stia programmando un videogioco e che allochi memoria ogni volta che viene creato un nemico. Questi nemici normalmente durano abbastanza poco e non ha quindi senso averli in memoria dopo che sono morti e il giocatore si è spostato in un altra area. Se tu non li deallocassi e il giocatore continuasse a giocare per tanto ad un certo punto occuperesti tutta la memoria disponibile e il tuo gioco non sarebbe più in grado di funzionare. In teoria per la memoria allocata per tutto il funzionamento del programma te ne potresti fregare, ma credo sia comunque meglio deallocare la memoria esplicitamente lo stesso. Non ti costa tanto farlo.
no certamente sono ovviamente d'accordo con te in questo capo, nel mio caso però si trattava di programmare un interprete per un sottolinguaggio del ruby
in tal caso avevo creato un albero sintattico da poi interpretare il quale ovviamente mi risulta indispensabile fino alla fine del programma, dunque quello che avevo fatto era semplicemente evitare di cancellarlo tanto ci pensa il sistema operativo(ho pensato io).
in questo caso dico, si tratta di un errore quantomeno di stile?
oppure no?e se si dove?
in tal caso avevo creato un albero sintattico da poi interpretare il quale ovviamente mi risulta indispensabile fino alla fine del programma, dunque quello che avevo fatto era semplicemente evitare di cancellarlo tanto ci pensa il sistema operativo(ho pensato io).
in questo caso dico, si tratta di un errore quantomeno di stile?
oppure no?e se si dove?