g++
C++: Problem med destruktor
Visa signatur
Visa signatur
"Nothing is impossible because impossible itself says I M Possible..."
Har hållit på ett tag nu med en sak men får ingen ordning på den alls.
Jag har en klass där jag behöver en destruktor för att inte få minnesläckor. Där finns en pekare till en array och i destruktorn står:
delete [] array;
Det fungerar bra om jag i main kallar den en gång som nedan:
MinKlass k = MinKlass();
Men om jag sedan omdeklarerar den som,
MinKlass k = MinKlass();
k = MinKlass();
så körs destruktorn direkt efter konstruktorn och tar bort den nya instansen och sedan i slutet av programmet så blir det förstås en krash då den försöker ta bort samma objekt igen.
Varför blir det så?
Tacksam för svar.
Vem skapar 'array'? Enligt ditt exempel så skapas antingen array i konstruktorn av MinKlass eller är en global. Är det en global, eller att du t.ex. (trots exemplet) skickar in arrayen till MinKlass, så att båda pekar på samma minne så kommer det såklart att krascha. Isåfall gäller att du får ta bort det från nåt annat ställe i koden (t.ex. den som skapade den) eller använda nån typ av smart pointer.
(För övrigt finns det ingen mening att ha mer än MinKlass k; när man skapar objektet. Tar det argument så är det t.ex. MinKlass k(1, 2.5f); )
g++
"Nothing is impossible because impossible itself says I M Possible..."
Copyright © 1999–2023 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.