07. november 2009 - 19:38Der er
7 kommentarer og 1 løsning
Efterligning af ArrayList
Hej Eksperter,
Jeg har nu siddet og bakset en lille klasse sammen som egentligt gør hvad den skal ;)
Problemet ligger i at da jeg har lavet den til en template klasse, bliver jeg nød til at specificerer hvilken type jeg vil lægge ind i listen sådan her:
ArrayList<TYPE> arraylist;
Jeg har før programmeret i C#, og det er der jeg fik inspirationen fra, da jeg lavede denne klasse. Men i C# kan man initialiserer sin arrayliste sådan her, helt uden at specificerer en type:
ArrayList al = new ArrayList();
Jeg håber der er nogle der kan hjælpe med enten at efterligne C#´s "object" klasse eller fortælle mig hvordan jeg gør så jeg kan indsætte elementer af forskellig type i mit array?
arne_v: Nu lavede jeg den hovedsageligt for at blive bedre til c++ ;) samt at lave nogle funktioner der var lidt mere menneskelige: push_back() -> Add()
Kan i på nogen måde hjælpe mig med at finde ud af om mit pointer array bliver slette i hukommelsen de rette steder osv.
Fordi jeg har prøvet at allokerer et integer array med 250 elementer. og derefter bruge delete []array; funktionen, imens jeg holdt øje med hvor meget hukommelse mit program brugte ifølge Joblisten.
Selve allokeringen kan ses da mit program går fra at bruge 192 kb til 216 kb, men efter kaldet til delete []array står den stadig på 216 kb
Er der nogle der kan forklare mig hvad jeg gør forkert?
Dit program allokerer fra C/C++ runtime library og C/C++ runtime library allokerer fra styre systemet.
Det er ret dyrt at allokere og deallokere fra styre systemet, så C/C++ runtime library laver normalt ikke passthrough af kaldene, men vedligeholder sin egen lille lidt af tilgængelig plads.
Derfor passer det du ser meget fint. Hvis du allokerer noget igen så skulle pladsen blive genbrugt.
Du kan iøvrigt ikke måle effektivt med så små data mængder. Gå op i multi MB.
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.