|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 113
|
[C++] dubbio con la delete
ho una situazione del genere:
Codice:
classeA **p; //puntatore a puntatori p=new classeA*[n]; //punta ad un array di dim. n di puntatori a classeA for(int i=0;i<n;i++) p[i]=new classeA(); //i puntatori puntano ad un oggetto Codice:
delete []p; |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2008
Città: Treviso
Messaggi: 1026
|
no, prima devi cancellare a mano gli oggetti di tipo classeA e poi l'array di puntatori, altrimenti gli oggetti di tipo classeA non vengono cancellati:
for(int i=0; i<n; i++) delete p[i]; delete[] p; comunque è meglio evitare di gestire manualmente memoria allocata dinamicamente tramite puntatori in questo modo, piuttosto puoi usare shared_array di boost che si occupano di cancellare gli array quando non sono piu usati; nel tuo caso sarebbe: shared_array<shared_ptr<classeA>> p(new shared_ptr<classeA>[n]); for (int i=0; i<n; i++) p[i]=new classeA; nel momento in cui l'array non è piu referenziato viene eliminato dal distruttore di shared_array, e anche gli ogetti di classeA che non sono piu referenziati da nessun altro vengono eliminati. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 113
|
ok grazie
|
|
|
|
|
|
#4 |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Concordo meglio usare degli smart pointers.
Inoltre nel 99% dei casi è meglio usare un std::vector piuttosto che un array tradizionale. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
se non si ha a che fare con un array che cresce dinamicamente e sul quale non si debbano fare operazioni di sort, vector risulta solo un inutile overhead, o in tempo di compilazione o peggio ancora in runtime. gli array a dimensione fissa penso che convenga sempre allocarli staticamente.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:39.




















