oregon ha scritto:
Non devi proprio usare il delete perché non hai allocato i con una new ...
Beh... da questo punto di vista non dovrei nemmeno eseguire il programma proprio perché non fa nulla...
Il problema sta proprio nel fatto che anche se assegno un valore ad i non cambia ASSOLUTAMENTE NULLA...
Ad esempio se scrivo:
class MyClass {
private:
int i;
public:
MyClass(int _i) : i(_i) {}
~MyClass() {
delete &i;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
MyClass* p = new MyClass(1);
MyClass m = *p;
return 0;
}
Oppure, volendo usare l'operatore new (che per un int mi pare assurdo, ma potrei essere sicuramente in torto):
class MyClass {
private:
int i;
public:
MyClass(int _i) {
i = *new int(_i);
}
~MyClass() {
delete &i;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
MyClass* p = new MyClass(1);
MyClass m = *p;
return 0;
}
ottengo sempre un Debug Assertion Failed!
Ovviamente è chiaro che scritto così il codice non serve a nulla, l'ho semplicemente ripulito da tutto quello che non è necessario per evidenziare meglio le parti che non funzionano.
oregon ha scritto:
Il libro *spiega* anche il codice che viene mostrato, applicando le nozioni descritte teoricamente prima di mostrare l'esempio. Quindi non copi-incolli senza comprendere ...
Infatti spiega talmente bene che pensavo di aver capito, ma come puoi vedere...
oregon ha scritto:
In questo modo non capisco come tu possa andare avanti, scrivendo codice a caso ...
Ehm... quel codice non è stato "scritto a caso", proviene da un sorgente di un centinaio di righe da cui ho eliminato tutto il possibile per riprodurre il problema senza provocarne altri, in modo da rendere più facile possibile per chi legge trovare l'errore.