28. april 2006 - 20:39Der er
10 kommentarer og 1 løsning
delete (uden variabel)
Nok en skummel titel men jeg vil jo alligevel forklare situationen :P
Jeg og min gruppe på uni er igang med at programere et spil i C++. Det går fint indtil videre. Undervejs opretter vi en masse objekter (class) på følgende måde:
new Rabbit(x,y,2000);
... altså uden at tilføre det til en variabel. Men på et eller andet tidspunkt så dør denne kanin og skal derfor fjernes igen. For at undgå at bruge "delete this", laver vi en "slettekø" (removeQueue) som bliver gennemgået engang imellem (denne kø indeholdere pointere til de objekter der skal slettes). Når objekterne skal slettes bliver det gjort med "delete" på følgende måde:
både object og removeQueue er af typen "*Rabbit" (eller en af dens forældre).
Problemmet er så bare at den sidste del (den med delete) fungere ikke. Det giver hurtigt en ordenlig mængde objekter som bare ligger og fylder i hukomelsen.
Jeg kunne forestille mig grunden til dette skyldes at variablen "object" ikke indeholder en "new Rabbit" men derimod bare en "*Rabbit". Har nemlig ikke kunne finde nogen eksempler hvor en delete bruges på en class der IKKE bliver lagt over i en variabel.
Er dette tilfældet? Gør jeg noget enormt forkert? Nogen forslag til hvad jeg kunne gøre?
tvivler jeg stærkt på, er nemlig ikke sikker på hvad du mener :) . Det at vi bruger new og delete er noget af det dybeste vi er kommet i at lege med hukomelse i C++ indtil videre :/
arne_v > hvorfor vil du have en copy constructor og assignment operator (går ud fra du her bare mener =, og ikke += osv.) ?
franzy > når du bruger new får du altid en pointer retur. dvs. new Rabbit(x,y,2000) returnerer en *Rabbit og det er kun pointeren du gemmer i en evt. variabel. Men hvor og hvordan får i disse pointere over i jeres kø ? (Det kunne være her kæden hopper af)
Og hvilken type er køen oprettet som (f.eks. et array af father eller ?)
Problemmet er løst (ved ikke hvordan jeg "lukker" dette spørgsmål.
Vi har et array af Father* som holder styr på alle oprettede objekter. Hvert objekt skal dog selv sørge for at tilføje sig selv til det hvilket jo er lidt risikabelt men indtil videre er det da lykkedes for os at holde styr på det :) .
Vores delete-kø er også et array af Father* hvor pointeren bliver smidt ind når den skal deletes.
Der er ingen i gruppen der har arbejdet så meget med C++ som vi gør nu, så det hele er rent læring :) ... og der vil komme en masse "fy"-metoder :D
Det er altid godt at lære noget af tingene, så det er jo fint nok :)
Men du lukker spørgsmålet ved at nogen opretter et svar og du så giver den eller de person(er) point. Jeg skal ingen have, så de andre må slås om dem ;)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.