Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Destruktor

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 < [ 2 ]
000
12.03.2006, 13:24 Uhr
theosoft



Schönes Wochenende!

Ich möchte eine zur Laufzeit angelegte Komponente wieder löschen.
Das würde ich gern im Destruktor des "Parent" (bei mir eine Form) machen.

Kann ich den vorhanden Destruktor erweitern?
Oder muss ich einen zsätzlichen Destruktor schreiben?
... oder wie sonst klappt das?
--
ifS (immer fröhliches Schaffen)
theosoft
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.03.2006, 13:30 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Ich würde in dem Fall eher zu TForm::OnDestroy o.ä. raten.

Wenn die Komponente aber so lange existieren soll, bis dein Form geschlossen wird, stellt sich mir die Frage, warum du sie nicht einfach zur Entwurfszeit erstellst?

Dieser Post wurde am 12.03.2006 um 13:30 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.03.2006, 14:37 Uhr
theosoft



daran hatte ich auch gedacht, habe aber etwas falsch gemacht, denn ....

C++:
// so habe ich denn Button erfolgreich erzeugt:
void __fastcall TForm1::FormClick(TObject *Sender)
{
  TButton *myButton = new TButton(Form1);
  myButton->Top = 50;
  myButton->Left = 50;
  myButton->Caption = "mein Knopf";
  myButton->Parent = Form1;
}
// und so wollte ich ihn loeschen:
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  if(Form1->myButton) delete Form1->myButton;
  if(myButton) delete myButton;   // das funkt auch nicht
}

und diese Fehlermeldung bekomme ich vom Compiler:
E2316 'myButton' ist kein Element von 'TForm1'

btw. bin ich auch neugierig, wie man an den Destruktor drankommt

--
ifS (immer fröhliches Schaffen)
theosoft

Dieser Post wurde am 12.03.2006 um 14:40 Uhr von theosoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.03.2006, 15:09 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
myButton ist eine lokale Variable der Funktion FormClick(...). FormDestroy(...) kennt daher die Variable nicht. Deklariere die Variable als privates Element der Klasse im entsprechenden Header. Dann funktioniert das.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 12.03.2006 um 15:10 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.03.2006, 15:39 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Ich stelle allerdings den Sinn dieser Sache in Frage.

Im Übrigen ist das ziemlich redundant, was du da verursachst: Jedes mal, wenn du auf den Button klickst, wird neuer Speicher allokiert, ohne das der alte freigegeben wird -> Dein Programm leaked! Für deinen Zweck (bzw. das, was ich hier als Zweck auslege) solltest du wirklich eher den Button zur Entwurfszeit anlegen und dann z.B. mit Visible arbeiten.

Dieser Post wurde am 12.03.2006 um 15:40 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.03.2006, 15:54 Uhr
Uwe
C/C++ Master
(Administrator)


@Reyx

Zitat von Reyx:
Ich stelle allerdings den Sinn dieser Sache in Frage.


Hab schon schon lange aufgegeben, über den Sinn mancher Implementierungen nachzudenken... . Sind halt spielereien (recht hast Du naürlich, zumal er sich dann nicht um das Abräumen kümmern muss).
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.03.2006, 17:25 Uhr
theosoft



hello,
erst mal vielen Dank!
Ich werde das jetzt verarbeiten; vielleicht melde ich mich dann noch mit ein paar d... Fragen ;-)
--
ifS (immer fröhliches Schaffen)
theosoft
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.03.2006, 17:36 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)



Zitat von Uwe:
zumal er sich dann nicht um das Abräumen kümmern muss).

Muss er aber hier eigentlich auch nicht

Denn mit

C++:
TButton *myButton = new TButton(Form1);

hat er schon der Form1 die Aufgabe übertragen, den Speicher bei Bedarf freizugeben. Wobei ich aber nicht weiß, wie verlässlich das in der Praxis arbeitet ...


Zitat von Uwe:
Hab schon schon lange aufgegeben, über den Sinn mancher Implementierungen nachzudenken...

Tja, man kann halt nur hoffen, dass irgendwann wieder bessere Zeiten kommen werden

Dieser Post wurde am 12.03.2006 um 17:37 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.03.2006, 20:57 Uhr
theosoft



OK - der Thread kann mit freundlichem Dank an euch beendet werden!

Ich erstelle alle Komponenten zur Laufzeit.

Für weitere "runtime-Fragen" nach Ereignissroutinen, Destuktoren u. a. muss ich halt noch ein bisschen studieren
--
ifS (immer fröhliches Schaffen)
theosoft
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.03.2006, 21:09 Uhr
Uwe
C/C++ Master
(Administrator)


@Reyx

Zitat von Reyx:


C++:
TButton *myButton = new TButton(Form1);

hat er schon der Form1 die Aufgabe übertragen, den Speicher bei Bedarf freizugeben.


Stimmt, hab ich übersehen.

Zitat von Reyx:

Wobei ich aber nicht weiß, wie verlässlich das in der Praxis arbeitet ...


Beim BCB hab ich noch keine Untersuchungen angestellt... Bei der Müllabfuhr von .Net(Garbage Collector) hingegen, kann man sich nicht immer sicher sein, wann das Objekt, bzw dessen Speicher frei gegeben wird.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 12.03.2006 um 21:09 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Borland C++ Builder ]  


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: