Speicher freigabe
-
Hi,
Ich erstelle in einem Dialogfeld dynamisch Controls mit z.B.
CButton* pButton = new CButton;
pButton->Create(...);
pButton->ShowWindow(SW_SHOW);Nun wollte ich fragen, ob der Speicher den ich damit reserviere, beim schließen meines Dialogfeldes automatisch wieder freigegeben wird oder ob ich mich darum selber kümmern muß.
Vielen dank im voraus
George
-
selber kümmern :p
-
Das hatte ich befürchtet;) Wäre ja auch irgendwie Schwachsinnig gewesen. Danke für die Antwort.
-
2. Möglichkeit: Button erstellen, der sich selber löscht
3. Möglichkeit: Beim Beenden des Dialogfelds durch alle Childbuttons iterieren und diese löschen
-
Danke für die Antwort. Habe ich Total übersehen, das da noch ne Antwort kam. Meinst du mit einem sich selbst löschenden Button sowas in dem Stil von:
- Abgeleitete klasse von CButton erstellen
- In Destruktor delete this einfügen?
-
Von der Idee her nicht schlecht, aber delete this nicht in den Destruktor, sondern in PostNcDestroy()

(delete ruft ja schließlich den Destruktor auf, das würde in einer Endlosschleife enden)
-
Kannst dir auch mal die Klasse auto_ptr aus der STL angucken. Dann machst du dir nen vector (oder ein CArray wenn du bei den MFC bleiben willst) und knallst die ganzen Zeiger in dein auto_ptr-Array. Beim schließen wird das ganze dann gelöscht. Oder du machst sowas hier:
template<typename T> class CAutoDeleteArray : public CTypedPtrArray<CPtrArray, T*> { CAutoDeleteArray(){}; virtual ~CAutoDeleteArray() { for(int i = 0; i < GetSize(); ++i) delete GetAt(i); } }; // ... // Button hinzufügen m_array.Add(pButton);NICHT GETESTET!