PDA

View Full Version : [c++] Risorse online


Sabonis
08-08-2008, 11:06
Mi sapete consigliare delle risorse online affidabili (in italiano o in inglese) sul c++?
Di materiale online se ne trova tanto ma ho dubbi sulla qualità.

Già che ci sono vi faccio anche una domanda:

è corretto fare?

int * p = 0;
delete p;

Il delete non crea problemi quando gli si passa un puntantore che vale 0??

DanieleC88
08-08-2008, 13:16
Non devi usare la delete sui puntatori, a meno che non puntino a zone di memoria allocate dinamicamente.

Per il materiale, leggiti "Thinking in C++" di Bruce Eckel, è di buona qualità, è gratuito, e dovresti anche trovarlo tradotto, se non ricordo male.

Sabonis
08-08-2008, 15:12
Non devi usare la delete sui puntatori, a meno che non puntino a zone di memoria allocate dinamicamente.

Per il materiale, leggiti "Thinking in C++" di Bruce Eckel, è di buona qualità, è gratuito, e dovresti anche trovarlo tradotto, se non ricordo male.

Scusa mi sono spiegato male. Non chiedevo se fosse possibile utilizzare il delete con puntatori che puntano a zone di memoria non allocate dinamicamente.
supponi che io abbia il mio:
myclass *p=0;
Supponiamo poi che io possa fare:
p = new myclass;

Quando vado a cancellare la memoria puntata da p, non so se ho allocato qualcosa oppure no.

Se faccio delete p; e ho allocato qualcosa, la memoria puntata da p viene liberata e va tutto bene, ma se faccio delete p; e p è 0 perchè non ho allocato nulla, che succede?

DanieleC88
08-08-2008, 15:25
Non ho mai provato di persona, ma suppongo che vada in crash. Può essere anche che se il puntatore è effettivamente NULL (un ((void*)0)) l'operatore delete eviti di provare a liberarne la memoria, ma non te lo posso garantire.
Se avessi un compilatore C++ sotto mano te lo direi con sicurezza assoluta: perché non provi effettivamente a lanciarlo e vedere cosa succede? :)

Ziosilvio
08-08-2008, 15:45
Mi sapete consigliare delle risorse online affidabili (in italiano o in inglese) sul c++?
Cprogramming.com (http://www.cprogramming.com/)
Association of C and C++ Users (http://accu.org/)
è corretto fare?

int * p = 0;
delete p;
Immagino sia lecito. Tutt'al più, l'operatore delete dovrebbe riconoscere che 0 non è una locazione "utilizzabile", e regolarsi di conseguenza.

Però, leggi cosa dicono su TechInterviews (http://www.techinterviews.com/?p=85):

--------

C'è qualcosa di sbagliato in questo codice?
T *p = 0;
delete p;
Nota: Tipica risposta sbagliata: Sì, il programma andrà in crash nel tentativo di cancellare un puntatore nullo.
Il candidato non capisce i puntatori. Un candidato molto sveglio chiederà se delete viene sovraccaricato per la classe T.

--------