Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » delete, aber wo?

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
13.12.2002, 20:53 Uhr
MarcDuerner



Hi,
Folgende philosophische Frage:

Wo sollen pointer deleted werden? An der Stelle, wo der Pointer erzeugt
wurde oder, wenn es ein Pointer auf eine Klasse ist in der Klasse selbst?

Zum Beispiel könnte man eine Eingabefenster-klasse haben die sich selbst
deleted, wenn ein close Button geclickt wird.


Marc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.12.2002, 06:44 Uhr
virtual
Sexiest Bit alive
(Operator)


Das mit der Eingabefensterklasse läßt sich realisieren.
Genrell kann man nicht dagen, daß man einen mit new erzeugten Pointer da deleten soll,. wo er erzeugt wurde. Generell kann man nur sagen: delete alles, was du irgendwo mit new angelegt hast,
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.12.2002, 13:31 Uhr
MarcDuerner



Das einzige was mir bei "selbst zerstörenden Objkten" Sorge bereitet ist die Gefahr
die Klasse ausversehen "von aussen zu löschen". Die Eingabefensterklasse
zerstört sich selbst indem es ein quit() funktion hat die beim drücken des
Close buttons aufgerufen wird.


void EingabeFenster::quit()
{
delete this;
}

Wenn ich aber ein neues EingabeFenster Object mit new erzeuge.

EingabeFenster* Fenster = new EingabeFenster(); // self-destructing, don't delete!

und dann versuche es zu löschen, was nicht nötig ist, wäre es ein bug.
weil nach der selbstzerstörung ja der Pointer Fenster nicht NULL ist!

delete Fenster; // crash


Gruß,
Marc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.12.2002, 13:46 Uhr
virtual
Sexiest Bit alive
(Operator)


Wenn das eine Klasse ist, die Du wiederverwenden willst, dann würde ich auch auf solche Dinge wie delete this verzichten. Das Eingabefenster gehört ja irgend jemanden: wenn Eingabefenster::quit aufgerufen wird, sollte diese Methode den Eigentümer darüber informieren, daß es deleted werden möchte.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.12.2002, 15:08 Uhr
MarcDuerner



Also, soll ich in den Klassen wo das Eingabefenster member ist jeweils eine
funktion quit() haben?

class Hauptfenster {

public:
HauptFenster();
~HauptFenster();

private:
Eingabefenster* Fenster;
void showEingabeFenster(){Fenster = new EingabeFenster();};
void closeEigabeFenster(){delete Fenster; Fenster=NULL;};

};

Gruß,
Marc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.12.2002, 15:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das Delete kann man in dem Fall doch auch in den Dekonstruktor tun, für was sind denn schließlich sonst da
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.12.2002, 16:34 Uhr
MarcDuerner



Flo,
Könnte man schon, aber das ist ja gerade der Vorteil von pointern, dass nur dann
Speicher angefordert wird wenn ich ihn brauche. Zweiter Vorteil ist, daß ich das
Eingabefenster nicht clear() 'en muss.

Marc
 
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: