View Single Post
Old 06-11-2001, 22:39   #5
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Quote:
Originariamente inviato da misterx
[b]so che hai usato bcb; quindi ti chiedo:

a) TImage** Panel = new TImage*[100];

b) TImage* Panel = new TImage[100];

io devo allocare dinamicamente dei TImage facendo in modo che con delete[] all'uscita dell'aplicazioni liberi completamente la memoria.

Avevo scritto una cosa tipo:

c) TImage *Image[100];

in questo caso specifico mi hanno riferito che la chiamata a delete[] nel momento in cui desidero eliminare un elemento della matrice e deallocare la memoria è inutile in quanto dealloca solo i punatori.

Ho provato le tre soluzioni (a/b/c) ma il risultato che ottengo apparentemente è il medesimo.

Sai qualcosa a tal proposito?

Grazie
Ciao.
Nel primo caso allochi effettivamente un array di 100 puntatori. Di conseguenza devi creare poi dinamicamente gli ogggetti uno ad uno. Ad esempio con
for ( int i=0 ; i<100; i++ )
Image[i] = new TImage;
Di conseguenza quando devi eliminare il tutto devi pure fare l'opposto. Eliminare i cento puntatori col delete e poi fare il delete[] sull'array.

con b) invece viene allocato dinamicamente un array di 100 oggetti. Quando fai delete[] sull'array viene chiamato il distruttore per ognuna delle cento istanze e quindi non occorre fare altro.

ancora piu' semplice con c). L'array e' allocato staticamente e non occorre elimiarlo. Gli oggetti vengono eliminati alla chiusura del programma.

a) e' piu' scomodo pero' ha il pregio che puoi inizializzare gli oggetti con costruttori diversi da quelli di default.
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso