Avatar billede mxs Nybegynder
26. juli 2005 - 16:34 Der er 21 kommentarer og
1 løsning

Memory leak

Har lige et enkelt spørgsmål ang. memory leaks.
Hvis vi forstiller os at jeg har det her


myClass* her = new myOtherClass;
her = new anotherClass;
delete her;


Vil det skabe memoryleaks?
Avatar billede arne_v Ekspert
26. juli 2005 - 16:40 #1
nej

fordi du delete'r hvad du har new'et
Avatar billede mxs Nybegynder
26. juli 2005 - 16:46 #2
Okay, tak arne v. Jeg skulle lige være sikker.
Avatar billede mxs Nybegynder
26. juli 2005 - 16:46 #3
Forresten smidt et svar.
Avatar billede arne_v Ekspert
26. juli 2005 - 17:23 #4
svar
Avatar billede arne_v Ekspert
26. juli 2005 - 17:25 #5
husk altid at delete det du newer

husk altid copy constructor og = operator

husk virtuel destructor
Avatar billede mxs Nybegynder
26. juli 2005 - 18:02 #6
Jeg har ingen copy constructor og virtual destructor. Hvad mener du med = operator?
Avatar billede arne_v Ekspert
26. juli 2005 - 18:08 #7
Hvis du i din constructor laver new bør have en copy constructor og en = operator
(det er den kode som bliver kaldt ved et assigment).

Hvis andre klasser skal arve fra din klasse bør destruktor være virtual.
Avatar billede mxs Nybegynder
26. juli 2005 - 18:17 #8
Oh men jeg har ingen new i min constructor, men jeg vil da lige lave en virtual destructor. Det er nok det klogeste.
Avatar billede arne_v Ekspert
26. juli 2005 - 18:20 #9
Klasser som ikke selv indeholder dynamisk allokerede ting er normalt
ret nemme - det bliver først sjovt med klasser som i deres constructor
allokerer noget som igen i deres constructor allokerer noget - så skal
man have meget styr på destructorer
Avatar billede mxs Nybegynder
26. juli 2005 - 19:30 #10
Ja skal man vel lave en copy constructor? Har læst lidt om det, men jeg har aldrig selv været i en situation hvor jeg skulle bruge det. Nok fordi jeg ikke har lavet noget rigtig seriøs med det endnu selvom jeg har brugt lang tid på at sætte mig ind i det, men jeg er rimlig godt med i det. Synes det er et spændende sprog.
Avatar billede driis Nybegynder
26. juli 2005 - 21:59 #11
arne, skaber koden ikke netop en memory leak ?
2 x new
1 x delete
= 1 objekt er ikke delete'd

Ellers har jeg overset noget ?
Avatar billede arne_v Ekspert
26. juli 2005 - 22:06 #12
¤/#¤!%¤&/%¤"!%¤#"!#¤"!

Du har fuldstændigt ret.

Jeg har ikke læst problem stillingen ordentlig.

Der bliver jo netop ikke delete't hvad der er new'et.
Avatar billede arne_v Ekspert
26. juli 2005 - 22:23 #13
mxs>

En refund ?
Avatar billede mxs Nybegynder
26. juli 2005 - 23:04 #14
Skulle lige til at sige det, da jeg begyndte at kigge på adresserne hvor de blev gemt, og de var ikke de samme. Jamen hvordan får jeg det ødelagt? Eller skal jeg ind og arbejde med refferencer måske?
Refund? Ej du beholder bare, tror jeg ikke du dør af. Har alligevel læst så mange tråde igennem her på eksperten.dk hvor du har hjulpet en (og derved også hjulpet mig) Så jeg tror at det er på sin rette plads. Jeg kan så sige at den som kommer med en hjælpende hånd, vil få en ekstra lille belønning.
Avatar billede arne_v Ekspert
26. juli 2005 - 23:07 #15
delete hvad der er new'et er god nok

så:

myClass* her = new myOtherClass;
delete her;
her = new anotherClass;
delete her;

bør virke
Avatar billede mxs Nybegynder
26. juli 2005 - 23:10 #16
Oh sådan :) Ja det forstår jeg godt. Tak arne. Du er nu en god hjælper :P
Avatar billede arne_v Ekspert
26. juli 2005 - 23:12 #17
med referencer mener du så & i metode erklæringers argument lister ?
Avatar billede mxs Nybegynder
26. juli 2005 - 23:15 #18
Nej kunne jo være jeg kunne lave refference til pointeren, så når jeg tilsidst slettede refferencen (Hvis det er mulig når den peger på en pointer) Så ville den slette alt hvad pointeren pegede på.
Avatar billede arne_v Ekspert
26. juli 2005 - 23:21 #19
Jeg tror at det du reelt spørger efter er hvad man kalder "smart pointers".

http://ootips.org/yonat/4dev/smart-pointers.html giver en introduktion (men det
er ikke helt simpelt)
Avatar billede mxs Nybegynder
26. juli 2005 - 23:24 #20
:) Kunne man ikke lave en klasse som tog den klasse som man vil allokoerer på heapen som argument og derefter kunne man, gennem klassen som har oprettet den anden klasse på heapen, tilgå dens medlemmere? :s
Avatar billede arne_v Ekspert
26. juli 2005 - 23:34 #21
jeg kan ikke følge dig

nu lyder det som du vil lave en proxy klasse

det kan også være at jeg trænger til at sove lidt
Avatar billede mxs Nybegynder
27. juli 2005 - 00:47 #22
Kan heller ikke følge mig selv. Jeg har bare mange ideer.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester