Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » konstruktoren und destruktoren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.09.2004, 19:22 Uhr
~peter
Gast


Bin gaaaaanz am anfang beim C++

nur so zum verständniss...
hab jetzt gerafft dass ich den konstrukter brauche um zb eine Eigenschaft meiner klasse gleich mit einem wert zu intialisieren klasse::klasse { eigenschaft = wert; }
wozu is der dekonstruktor da das raff ich net so ganz....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.09.2004, 19:43 Uhr
Pablo
Supertux
(Operator)


Sagt dir "Speicher Reservierung" etwas? Hast du mit dem Keyword []b]new[/b] gearbeitet?

Wenn du sowas hast:


C++:
MyCLASS::MyCLASS()
{
    this->x = new int[25];
}



dann wird Speicher für eine Klassenvariable reserviert, und zwar 25*sizeof(int) Bytes. Dieser Speicher muss man per Hand mit delete [] freigeben, sonst bleibt im Heap bist du den Computer ausgeschaltet hast.

Wenn du aber eine Instanz einer Klasse nicht mehr brauchst, weil du etwa diese Instanz in einer Funktion erstellt hast und die Funktion beendet wird, dann brauchst du (das ist nur ein Beispiel) den reservierten Speicher für int MyCLASS:x nicht mehr, also musst du ihn freigeben, die Frage ist nur wie?

Der Destruktor wird aufgerufen, wenn die Instanz der Klasse "zerstört" wird, also wenn man diese nicht mehr braucht, und der Destruktor kann dafür sorgen, dass der Speicher freigegeben wird, so:


C++:
MyCLASS::~MyCLASS()
{
    delete [] this->x;
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.10.2004, 12:15 Uhr
~peter
Gast


MyClass:MyClass()
{

eigenschaft = 1;

}

MyClass:~MyClass()
{}


macht das doch auch oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.10.2004, 12:28 Uhr
0xdeadbeef
Gott
(Operator)


Der Konstruktor wird aufgerufen, wenn du das Objekt erstellst, der Destruktor, wenn es zerstört wird - das ist auch schon alles.

Was du darin machst, ist deine Sache - meistens läuft es auf Speichermanagement hinaus, also Speicher freizugeben, den man vorher alloziiert hat, Aber du kannst z.B. auch sowas machen:

C++:
#include <iostream>

struct A {
  A() { std::cout << "Ich lebe! Yay!" << std::endl; }
  ~A() { std::cout << "Neeeeein! Ich will noch nicht sterben! AAAARGH! *krklkfz*" << std::endl; }
};

int main() {
  A a;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.10.2004, 14:01 Uhr
ao

(Operator)


Die Beispiele aus Lehrbüchern sind meist ziemlich trivial. Im echten Leben geht das meist viel weiter, alles, was im Konstruktor aufgebaut wird, wird im Destruktor wieder abgeräumt. Beispiele:

Wenn dein Programm eine serielle Schnittstelle braucht, dann wirst du z.B. beim Aufbau der Verbindung ein Objekt vom Typ CSerialConnection (oder so ähnlich) anlegen, das die Resource "COM1" zu belegen versucht. Wenn das gelingt und das Programm anschließend beendet wird, muss die Schnittstelle wieder freigegeben werden. Der typische Ort um das zu tun ist der Destruktor.

Oder: Dein Programm speichert seine Einstellungen (Fensterposition und -größe, ....) in der Registry, oder in einem .rc-File oder sonstwo. Beim Programmstart erzeugst du eine Fensterklasse, die in ihrem Konstruktor versucht, die gespeicherten Einstellungen vom letzten Mal zu finden und auszulesen, damit das Fenster an die richtige Stelle gemalt wird. Am Programmende wird das Fenster geschlossen, und der Destruktor der Fensterklasse legt die wichtigen Daten in die Registry.

Oder: Eine Klasse, die ein Dokument bearbeiten kann, muss im Destruktor alle noch ungesicherten Änderungen abspeichern und das Dokument-File ordentlich schließen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: