Pagina 2 di 6 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 51
  1. #11
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    i template non servono sostanzialmente a nulla "nel mondo reale", al pari della redefinizione degli operatori.

    è solo "zucchero sintattico", non aggiunge nulla di particolarmente utile
    ---
    la classe è chiaramente scritta male, o meglio con approccio poco esperto.

    una sola segnalazione: mai e poi mai, nel distruttore, deallocare un blocco di memoria "a casaccio", senza aver prima verificato che sia stato allocato, e quanto, come e dove.

    parimenti mai e poi mai "fidarsi" dell'allocazione di qualcosa, controllare sempre il risultato della funzione

  2. #12
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da MItaly
    Di sicuro in un container "vero" non mescolerai mai il codice della classe-container con quello di interfaccia con l'utente. Gli errori non si riportano scrivendo sullo schermo, ma con le eccezioni.
    non sempre, anzi in realtà spesso no, preferendo attributi, addirittura stringhe, con l'elenco degli errori che sono occorsi.
    questo per poter usare flag del tipo "silenzioso", e soprattutto avere descrizioni "lunghe".
    Un'eccezione del tipo "boh" non è utile in un programma complesso, quanto un bello
    "errore nell'allocazione della memoria per X byte fallito"

  3. #13
    Originariamente inviato da RooccoXXI
    Troppo complesso per il mio livello, ma buono a sapersi! =).
    Cosa è troppo complesso?

    L'operatore []?


    O l'ereditarietà da una classe per le eccezioni std?

    codice:
    class DivideByZeroException : public std::runtime_error
    {
       public:
    
          // Constructor specifies default error message
          DivideByZeroException()
             : std::runtime_error( "attempted to divide by zero" ) {}
    };
    
    
    // Cosi si lancia
    if ( denominator == 0 )
           throw DivideByZeroException();
    
    
    // Cosi si cattura
    catch ( DivideByZeroException &exception ) {}
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  4. #14
    Originariamente inviato da franzauker
    i template non servono sostanzialmente a nulla "nel mondo reale", al pari della redefinizione degli operatori.

    è solo "zucchero sintattico", non aggiunge nulla di particolarmente utile
    ---
    Spiegati meglio per uno che come me non ha capito...
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  5. #15
    Originariamente inviato da franzauker
    i template non servono sostanzialmente a nulla "nel mondo reale", al pari della redefinizione degli operatori.

    è solo "zucchero sintattico", non aggiunge nulla di particolarmente utile
    Suppongo quindi che tu non abbia mai usato la STL o le librerie boost; fidati che sono molto meglio dei contenitori generici fatti con i void * senza type safety...
    Originariamente inviato da franzauker
    non sempre, anzi in realtà spesso no, preferendo attributi, addirittura stringhe, con l'elenco degli errori che sono occorsi.
    questo per poter usare flag del tipo "silenzioso", e soprattutto avere descrizioni "lunghe".
    Un'eccezione del tipo "boh" non è utile in un programma complesso, quanto un bello
    "errore nell'allocazione della memoria per X byte fallito"
    Le eccezioni in genere "si portano dentro" un messaggio da visualizzare all'utente (metodo what() della classe exception). Il punto delle eccezioni comunque non è tanto il loro tipo, ma il fatto che l'ignorarle è un opt-in, a differenza di quanto accade per i codici di errore, che si possono ignorare tranquillamente, e che risalgono automaticamente lo stack fino al relativo blocco catch. Le eccezioni, abbinate alla semantica RAII, sono la chiave della gestione delle risorse nel C++ moderno.

    Se poi molti continuano ad usare il C++ come "C con classi" sono problemi loro...
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #16
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da GliderKite
    Spiegati meglio per uno che come me non ha capito...
    quando ti occupi di programmi "veri", e per "veri" intendo da qualche milione di righe scritte nel corso di un decennio, e magari devi coordinare una 50ina di programmatori, gli errori ci sono sempre e comunque.

    Più sono descrittivi, più è probabile che qualcuno li noti, più è probabile che qualcuno li risolva.

    gli aspetti diciamo così teorici-accademici non hanno alcuna rilevanza, rispetto alla facilità ed immediatezza di individuazione e correzione, e soprattutto il fatto che, semplicemente, le eccezioni non esistono (per l'utente, in teoria, poi in pratica è altra cosa).

    ogni situazione deve essere pre-gestita, gestita e post-gestita, programmazione difensiva e difesa in profondità in ogni singola porzione del codice.

    una delle leggi principali dell'informatica è: se è semplice, FORSE funziona; un'altra è non funzionerà comunque, preparati di conseguenza; corollario anche i compilatori talvolta sono sbagliati, non fidarti mai

    PS non vorrei polemizzare, ma C++ (come tutti gli altri linguaggi) non è altro che un mezzo per ottenere un fine. Non è nè perfetto, nè adatto in tutte le situazioni, nè "magico".
    Per ogni situazione conviene scegliere la strada migliore che non necessariamente è quella di C++

  7. #17
    Originariamente inviato da franzauker
    PS non vorrei polemizzare, ma C++ (come tutti gli altri linguaggi) non è altro che un mezzo per ottenere un fine. Non è nè perfetto, nè adatto in tutte le situazioni, nè "magico".
    Per ogni situazione conviene scegliere la strada migliore che non necessariamente è quella di C++
    In questo mi trovi assolutamente d'accordo, problemi diversi richiedono linguaggi e metodologie diverse.
    Quello che voglio dire è che, in codice nuovo, secondo me (e secondo molti) le eccezioni sono un buon metodo per riportare gli errori ed evitare che si creino situazioni inconsistenti derivanti dall'ignorare gli errori, avere classi "mezze costruite" o in stati indeterminati e così via. Dico in codice nuovo perché, ovviamente, le eccezioni non sono gratis, ma richiedono l'uso della RAII per la gestione delle risorse, altrimenti è facile avere resouce leaks.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #18
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da MItaly
    Quello che voglio dire è che, in codice nuovo, secondo me (e secondo molti) le eccezioni sono un buon metodo per riportare gli errori ed evitare che si creino situazioni inconsistenti derivanti dall'ignorare gli errori, avere classi "mezze costruite" o in stati indeterminati e così via.
    sono perfettamente d'accordo ma, come accennato, la gestione degli errori sono il primissimo aspetto da tener presente, sempre e comunque, nella "vita reale".

    Errori ed eccezioni, semplicemente, (in teoria) non devono esistere proprio, indipendentemente da tutto il resto, che si scriva in assembler, C++, LISP o javascript.

    Poi nell'ambito del software diciamo così "casereccio" (o anche professionale, scritto male, ed è assai frequente) tutto può accadere (ed accade)

  9. #19
    Ti rispondo con codice perchè a parole sarebbe lungo e infruttuoso. Questo è un semplicissimo programma in C quindi facile da correggere...



    codice:
    #include <stdio.h>
    #include <string.h>
    
    
    #define BUFFER_SIZE 100
    
    
    int checkpsw( char *psw )
    {
    	int flag = 0;
    	char buffer[ BUFFER_SIZE ];
    
    	strcpy( buffer, psw );
    
    	if( !strcmp(buffer, "franzauker") )
    		flag = 1;	
    
    	return flag;
    }
    
    int main( int argc, char *argv[] )
    {
    	if( argc < 2 )
    	{
    		printf( "Usage: %s <password>\n", argv[0] );
    		exit(1);
    	}
    
    	if( checkpsw(argv[1]) )
    	    puts( "Great!\n" );
    
    	else
    	    puts( "Fail!!!\n" );
    
    	return 0;
    }

    MA, MA?!!? Dov'è l'errore? Perchè c'è un errore?!?!

    Se fosse come dici tu chiunque riuscirebbe a trovarlo.....
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  10. #20
    Buffer overflow FTW.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.