Kann mal jemand schauen, ob dieses wxWidgets-Bsp. ein gutes ist?!
-
Hallo,
ich bin gerade über folgenden Code gestolpert. Es handelt sich zwar eher um C++-Probleme, aber vielleicht ist das bei wxWidgets ja erlaubt..... book = new wxBookCtrl(this, BOOKCTRL); wxPanel *panel = new wxPanel(book); new wxButton( panel, BUTTON1, _T("Button &1"), wxPoint(50,30), wxSize(100,30) ); new wxButton( panel, BUTTON2, _T("Button &2"), wxPoint(50,80), wxSize(100,30) ); ...
Einmal werden namenlose Buttons erzeugt (also nur "new wxButton(...);"). Warum macht man das so? Alles andere bekommt doch auch eigene Namen.. Ich würde sagen, weil man nie wieder auf den jew. Button zugreifen muss, oder?!
... panel = new wxPanel(book); listbox1 = new wxListBox( panel, LISTBOX1, wxPoint(0,0), wxSize(150,70), 9, choices, wxLB_SORT | wxLB_EXTENDED); book->AddPage(panel, _T("Tab2"), false); panel = new wxPanel(book); wxBoxSizer *mysizer = new wxBoxSizer( wxVERTICAL ); panel->SetSizer(mysizer); textLog = new wxTextCtrl(panel, TEXTBOX1, _T("Log\n"), wxPoint(0, 250), wxSize(100, 50), wxTE_MULTILINE); mysizer->Add(textLog, 1, wxEXPAND | wxALL, 5); book->AddPage(panel, _T("Debug"), false); ...
Und zum zweiten wird mehrfach nacheinander ein Zeiger "panel" auf diverse dynamisch erzeugte Panels zugewiesen.
Wie oder wann sollen die 'alten' Zeigerinhalte denn dann wieder frei gegeben werden??
Also sowas wie:int *i1 = new int; {...} i1 = new int;
Wie kann ich da die ursprünglichen "ints" löschen??
PS. Eine Frage noch zum Tutorial hier: Kann man das auch für die aktuelle Version nutzen, bzw. worauf ist zu achten?
Gruß,
wxWasIstLos
-
wxWasIstLos schrieb:
Einmal werden namenlose Buttons erzeugt (also nur "new wxButton(...);"). Warum macht man das so? Alles andere bekommt doch auch eigene Namen.. Ich würde sagen, weil man nie wieder auf den jew. Button zugreifen muss, oder?!
Ja, die Buttons tragen sich selbst (Constructor) im Panel als Children ein, deshalb brauchst du keine eigenen Variablen dafür.
wxWasIstLos schrieb:
Und zum zweiten wird mehrfach nacheinander ein Zeiger "panel" auf diverse dynamisch erzeugte Panels zugewiesen.
Wie oder wann sollen die 'alten' Zeigerinhalte denn dann wieder frei gegeben werden??Das Panel trägt sich wiederum beim übergeordneten Element ein. Freigegeben wird der Speicher, wenn eben jenes sein Lebensende erreicht. Du selbst musst da nicht für sorgen, das macht wxWidgets.
wxWasIstLos schrieb:
Also sowas wie:
int *i1 = new int; {...} i1 = new int;
Wie kann ich da die ursprünglichen "ints" löschen??
Nur, wenn du dir die Adressen irgendwo merkst. Bei wxWidgets wird das automatisch für dich übernommen, bei int musst du es selbst machen.
-
Aha, besten Dank!
Ist das bei allen wxObjekten so? Und wo kann man das herausfinden?
Naja, es kann ja nicht schaden jedem Ding seinen eigenen Zeiger zu geben, zumindest erstmal...
-
wxWasIstLos schrieb:
Aha, besten Dank!
Ist das bei allen wxObjekten so? Und wo kann man das herausfinden?Nein, nur bei Kindelementen und dem Mainframe den man an TopLevelWindow übergibt.