|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
[C++] Distruttore e operator=
Ciao ragazzi ho questo problema:
Codice:
Object::~Object()
{
if(!vector.empty())
{
for(int i=0; i<vector.size(); i++)
delete vector[i];
vector.clear();
}
}
Object &Object::operator=(const Object &b)
{
if (this!=&b)
{
if(!vector.empty())
{
for(int i=0; i<vector.size(); i++)
delete vector[i];
vector.clear();
}
vector = b.vector;
}
return *this;
}
Specifico che si tratta di un vector<type*>, quindi devo deallocarlo a mano. quando eseguo il programma inserendo una assegnazione nel main, il programma si esegue ma poi lancia una eccezione, come se andasse a togliere due volte lo stesso oggetto credo. Se invece provo a mettere i<vector.size() - 1 nel ciclo del distruttore, il problema non c'è. Idem se elimino il codice che dealloca i puntatori dalla funzione operator= Ora mi chiedo: è giusta l'implementazione? cosa sbaglio? grazie
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ma il debug...? ti lancia un'eccezione, embè? che IDE usi? non viene interrotto il programma quando viene lanciata l'eccezione? non hai la possibilità di analizzare il contenuto del vettore?
PS: le clear comunque sono inutili. |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
altra cosa che mi viene in mente, non hai la possibilità di usare degli smart pointers per gestire gli oggetti contenuti nel vettore? inoltre, è proprio necessario allocarli dinamicamente e gestirli tramite puntatore?
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
uso devc++
fa una cosa strana, praticamente mi esegue il programma e arriva a system("pause") e si blocca, non capisco cosa può essere cioè mi esce il risultato del programma tutto corretto, es: prova Premere un tasto per continuare.... in teoria dovrebbe chiudersi la finestra, invece premo e viene lanciata un'eccezione
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Codice:
... vector = b.vector;
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Vero mi era sfuggito
Devi copiare gli elementi del vettore con un ciclo e allocarli al momento, o punteranno entrambi allo stesso
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
grazie mille, problema risolto
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:22.




















