10. august 2004 - 15:57Der er
20 kommentarer og 2 løsninger
Constructor/destructor - hvad er det?
Hej programmører!
Jeg er ved at lære c++ og er ved at være godt på vej men én ting irriterer mig. Jeg ved ikke 100% hvad en constructor og en destructor er og hvad formålet med dem er... Det står ikke godt forklaret i de bøger jeg har. Er der nogen der kan skære det ud i pap, både definitionen og brugen?
Vil det sige at en constructor er det samme som en oprettelse af et hvert objekt? Fx. hvis jeg opretter en tilfældig variabel: int VarNavn; så skal man bare have i baghovedet at der bliver brugt en constructor til oprettelsen?
- Forstår det stadig ikke 100%. Har læst at hvis man ikke opretter nogen constructor/destructor så laver compileren selv nogen når man complierer projektet. Hvorfor så tage sig af selv at lave en constructor/destructor? - Mente ellers at en erklæret variabel også var et objekt, der kan man bare se.
Når man bruger resourcer, dvs. memory, filer og lign., så er det vigtigt at frigive resourcen når den ikke bruges mere (en computer består af et begrænset antal resourcer..). Det er ofte oplagt at bruge destruktøreren til at frigive resourcen. På den måde er man sikret at destruktør metoden kaldes når objektet går ud af scope og dermed at brugeren af klassen ikke glemmer at frigive resourcer.
Hvis du f.eks. bruger en stl vector eller string, så vil den (formentlig) allokere en mængde memory når objektet initialiseres. Løbende vil mængden af memory stige (hvis der tilføjes til string eller vector). Når vector eller string går ud af scope så vil destruktøren kaldes og den allokerede memory vil blive frigivet.
Det er korrekt at compileren selv laver en konstruktør hvis du ikke gør det. Den er bare tom, dvs: Klasse::Klasse() {}
Ok, men kan man så ikke bare lade den stå tom? Hvad er pointen med at lade den gøre noget når funktionen/klassen eller lign. kan sættes til det? Der står også at compileren selv sørger for destructoren hvis programmøren ikke gør... Så kan man ikke bare helt glemme dem? Hvis ikke, hvordan ved man så hvornår man skal kalde destructoren/constructoren og hvad der skal stå i dem? Ved godt jeg stiller en masse dumme spørgsmål men kan bare ikke rigtig finde et sted at placere dem i forhold til alt det andet jeg har læst.
Jo, man kan godt glemme alt om constructorer og destructorer. Man kan også glemme alt om member funktioner, virtuelle funktioner og nedarvning og skrive alting i C.
Men det er en meget vigtig feature ved C++, og når man har lært sig fidusen vil man synes at alt andet er besværligt.
Den første ting man finder ud af bruge konstruktoren til er at initialisere sin class:
class Foo { public: Foo() { x = 0; } Foo(int _x) { x = _x; } int x; };
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.