View Single Post
Old 05-04-2011, 01:06   #20
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
Sul serio, pensavo fosse default. Ma poi un bug mi ha fatto cambiare idea. Non lo so, magari lo fa "a volte"
Bisognerebbe indagare...

@tomminno

Prima di tutto, c'è da dire che uso C/C++ perchè è multipiattaforma, e perchè ha più librerie compatibili di qualsiasi altro linguaggio esistente...
il che rende molto difficile usare allo stesso tempo degli "advanced tricks" di C++ senza complicarsi la vita con librerie di terzi.

ad esempio la std è piuttosto oscena, e preferisco non usarla.
A parte che è lenta, a parte che genera errori incomprensibili, ha anche il problema che non è usata da circa nessuna libreria di terze parti, almeno nel mio ambito.
Alcuni esempi:
-OpenGL
-DirectX
-Win32
-OpenAL
-Box2D
-Havok
-PhysX
-CUDA
-Qt
-l'iphone
-android NDK

in sostanza, quelle librerie che esistono in C/++ per le sue performance, o per la compatibilità con C in genere NON usano STL;
di conseguenza se i dati interni al programma sono immagazzinati in contenitori STL, tutto il codice di interazione diventa un cast, una copia, o peggio... e questo perchè STL ha solo contenitori opachi.
L'unico tipo veramente usato di STL è la stringa, quella si salva... ma in generale la situazione è completamente diversa da Java, e STL fallisce proprio perchè è tutto tranne che standard.

Ovviamente esistono ambiti dove le performance non contano, ma allora li è da malati usare C++ e basta...

I templates complicano la vita sostanzialmente a causa del compilatore, ad esempio in quei casi quando 2 template devono includersi a vicenda.
Bellissimo
Inoltre come sopra generano errori assurdi e uccidono il tempo di compilazione, che per progetti grandi E' importante.
Diverse strutture nei miei progetti non si potrebbero fare senza template, intendiamoci...
ma vanno usati con attenzione e non come fa STL o Boost, perchè a tutti gli effetti sono una feature buggata.

Quote:
Per non parlare di tutti quei casi in cui si manovrano i singoli byte, e allora malloc è perfetto.
Perchè dovrei usare new invece, che è più lento, oltre ad essere meno chiaro.
Mi stai paragonando
Codice:
void* data = (void*)new char[ size ];
a
Codice:
void* data = malloc(size);
insomma. Il primo così, a occhio, è osceno, almeno per quanto mi riguarda. "new" mi dice a pelle "ehi sto allocando un oggetto".
Poi se vuoi usarlo come malloc si può fare, ma per me confonde e basta.

Quote:
A me pare che bad_alloc sia l'eccezione sollevata se new fallisce. Dove starebbe il comportamento indefinito in caso d'errore?
Sapevo che in realtà le implementazioni di C++ restituiscono NULL, comunque non è un problema perchè di tutti i bug, new che fallisce non m'è mai capitato

Comunque sto sito, anche se esagera, fa comunque capire come la penso quando parlo di "inconsistenze"
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 05-04-2011 alle 01:17.
Tommo è offline   Rispondi citando il messaggio o parte di esso