Quote:
Originariamente inviato da Tommo
Ci sono molti casi in cui quello che si vuole fare è proprio allocare della memoria non inizializzata per un'uso futuro, e in quel caso new oltre a essere lento è anche abbastanza pericoloso; ad esempio se fai new float*[n] ti dovrai ricordare di non chiamare delete, ma delete[].
|
Se usassi vector,list o array potresti dimenticarti perfino di delete[].
Quote:
Che per quanto mi riguarda è una schifezza, ed è anche inutilmente non trasparente rispetto a malloc/free, che se si sa cosa si sta facendo sono molto più chiari e sicuri (allochi n byte, se non riesce da NULL. Punto.).
|
Certo buttiamo via i costruttori che non servono proprio a niente...
Chi ti vieta di allocare con new un array di n byte???
Quote:
Per non parlare di tutti quei casi in cui si manovrano i singoli byte, e allora malloc è perfetto.
|
Eventuali differenze con new???
Quote:
E tra l'altro nemmeno new[] e delete[] chiamano i costruttori/distruttori
|
Se intendi allocare un array di qualcosa il costruttore di default viene chiamato eccome.
Quote:
E vogliamo parlare dell'overload di new, o del fatto che new non ha un comportamento definito in caso di errore?
|
A me pare che bad_alloc sia l'eccezione sollevata se new fallisce. Dove starebbe il comportamento indefinito in caso d'errore?
Quote:
Io più imparo C++ più mi rendo conto di usare un "C con le classi", tanta, troppa roba "avanzata" in C++ è semplicemente stata realizzata male e complica soltanto la vita, partendo dalla STL per finire ai templates.
|
Eh si certo STL e template complicano proprio la vita
Sarà mica appunto che te usi il "C con le classi" invece del C++?
Quote:
Quindi pls prima di dire boiate come "lol c'hai C++ usa new" pensateci
|
In C++ non esiste ragione per usare malloc al posto di new.
E se te sostieni che è meglio usare malloc forse è il caso di studiarsi un po' meglio il C++, oppure limitarsi a parlare di C.