Newsgroup: it.comp.lang.c++
Titolo: Delete e delete[] con lo stesso risultato: perchè

Ciao a tutti,
scrivo per porvi una domanda: ho ben chiara la differenza tra gli
operatori delete e delete[]...quello che non riesco a capire è perchè
in un programma da me creato la chiamata di uno o dell'altro su un
array di oggetti creati con l'istruzione new[] comporta lo stesso
risultato...googleando ho letto che alcuni compilatori e ambienti
riconoscono automaticamente se la memoria allocata è per un solo
oggetto o per un array di oggetti, e chiamano quindi l'operatore
corretto alla deallocazione, ma in generale il risultato di una
chiamata di delete su un puntatore allocato con new[] (e viceversa)
non è definita. mi è stato anche detto che con i nuovi compilatori non
c'è nessun problema ad usare un delete su un array creato con new
(come è nel mio codice).
A prescindere dal fatto che per realizzare un codice corretto è giusto
mantenere sempre l'associazione new-delete e new[]-delete[], se voglio
realizzare un programma portabile senza problemi da un compilatore ad
un altro devo comunque seguire questa regola?insomma, è vero che tutti
i nuovi compilatori hanno quel meccanismo di autoriconoscimento del
tipo di allocazione (singolo oggetto o array di oggetti) di cui
parlavo prima?o è addirittura una proprietà del linguaggio?
Il mio ambiente di programmazione è Linux Kubuntu 7.10, gcc 4.1.3.
grazie a tutti!
ciao mauro

 o è addirittura una proprietà del linguaggio? 
No.
Max

Grazie per la risposta!
Il fatto che con i compilatori nuovi si possa utilizzare delete su
array creati con new[] me l'ha detto un mio conoscente
programmatore...ma non l'ho trovato scritto da nessuna parte, anche
perché una cosa del genere non avrebbe senso, visto che andrebbe
contro le definizioni del linguaggio.
Unica eccezione, come dicevo, che in questa discussione
http://www.daniweb.com/forums/thread7497.html
si dice che alcuni compilatori sono in grado di capire se è stato
allocato spazio per un oggetto o un array.
Ma anche valgrind mi segnala una difformità di uso del delete con
new[], quindi....
ora che hai confermato le mie supposizioni,sotto a modificare il mio
codice....e quello che mi hanno passato... :(
grazie ancora, ciao ciao e buon anno!

 wrote in message
news:f1267dfb-1831-4938...@i72g2000hsd.googlegroups.com...


Mi basavo sulla memoria che il programma utilizzava, visualizzata
tramite il comando top (praticamente facevo un ciclo che allocava
10000 volte con new [] e deallocava con delete), e la memoria non
cresceva (almeno così a vista)...poi ho installato valgrind che
infatti mi segnalava un mismatch tra l'allocazione e la deallocazione,
e i relativi memory leaks.
Sistemando correttamente le accoppiate new[]-delete[] ora non ho più
nessun errore!
grazie ancora, ciao a tutti


 e i relativi memory leaks.
Ti consiglio "Effective C++", ti evita *questo* ed altri errori che
naturalmente
i programmatori con i capelli fanno o hanno fatto :-)
Ciao :)

Grazie mille! ;-)
ciao ciao!


 Grazie mille! ;-)
Posso suggerirti anche una ricerchina su google per imparare a quotare?
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 Posso suggerirti anche una ricerchina su google per imparare a quotare?
Giusto, hai ragione,pardon! :o)