ik ben hier nu al een paar dagen mee bezig geweest, maar ik kom er gewoon echt niet meer uit. het kan zijn dat mijn ontwerp gewoon niet goed is maar ik doe het volgende.
ik heb ergens een vector die pointers naar een Entry class bevat:
de vector wordt gevuld door een Parser die voor elke regel die hij leest uit een file bepaalde gegevens bijhoud die ik gedurende de hele applicatie nodig heb, tenzij:
a) de applicatie afsluit ... resources vrijgeven
b) de parser opdracht krijgt een nieuwe file te lezen... ook resources vrijgeven en daarna wordt de vector weer opnieuw gebruikt.
wanneer ik dus die resources wil vrijgeven wil ik dus al die Entry's delete'en. dit lukt alleen op een vrij baggere en zeer langzame manier en ik zie door de bomen het bos niet meer. wat ik heb geprobeert is gewoon de vector doorlopen en telkens delete aanroepen op de huidige pointer.... werkt wel, maar heeel langzaam.
hoop dat het duidelijk is.
waar zit mijn denkfout? is het wel mogelijk? moet ik een andere stuctuur gebruiken?
ik heb ergens een vector die pointers naar een Entry class bevat:
C++:
1
| std::vector<Entry*> m_entries; |
de vector wordt gevuld door een Parser die voor elke regel die hij leest uit een file bepaalde gegevens bijhoud die ik gedurende de hele applicatie nodig heb, tenzij:
a) de applicatie afsluit ... resources vrijgeven
b) de parser opdracht krijgt een nieuwe file te lezen... ook resources vrijgeven en daarna wordt de vector weer opnieuw gebruikt.
wanneer ik dus die resources wil vrijgeven wil ik dus al die Entry's delete'en. dit lukt alleen op een vrij baggere en zeer langzame manier en ik zie door de bomen het bos niet meer. wat ik heb geprobeert is gewoon de vector doorlopen en telkens delete aanroepen op de huidige pointer.... werkt wel, maar heeel langzaam.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| //dit kost heel veel tijd en helemaal niet netje naar mijn id for(int i = 0; i < m_entries.size(); i++){ delete m_entries[i]; } //de vector doorlopen met een iterator werkt ook niet, hetzelfde probleem for(std::vector<Entry*>::iterator it = m_entries.begin() ; it < m_entries.end(); it++){ delete (*it); } //toen dacht ik, he vector is gewoon een wrapper om een array heen, misschien kan ik wel gewoon delete[] erop aanroepen delete[] m_entries; //genereert error C2440, wat duidelijk is natuurlijk m_entries.erase(m_entries.begin(), m_entries.end()); //dit maakt de vector leeg, duidelijk, maar geeft niet de resources vrij //hetzelfde met clear(); m_entries.clear(); //blaat |
code:
1
2
| //toch ff nog de error error C2440: 'delete' cannot convert 'std::vector<_Ty>' to 'void *' with [ _Ty=Entry* ] |
hoop dat het duidelijk is.
waar zit mijn denkfout? is het wel mogelijk? moet ik een andere stuctuur gebruiken?