Vernichtung von VCL-Objekten



  • Hi, ich habe mal eine prinzipielle Frage zur Vernichtung VCL-Objekten. Dazu folgenden Beispielcode:

    for (int i=1; i<=lnDimAmount;i++)
    {
        TTabSheet *lpPage = new TTabSheet(this);
        lpPage->PageControl = PageControl1;
        lpPage->Caption = "Dimension: " + IntToStr(i);
    }
    

    Ich erzeuge also verschiedene Tabsheets auf einem Pagecontrol zur Laufzeit. Meine Frage ist nun: Muss ich diese Tabsheets auch wieder einzeln mit delete zerstören, oder vernichtet die das Pagecontrol mit?



  • Hi,

    Gernerell muss man nicht unbedingt VCL Objkete wieder zerstören, die im Konstruktor den Parameter Owner besitzen. Die Parent- Komponente geht nämlich hin und schaut, ob Sie der Owner der Controls sind, die sich auf ihr befinden. Wenn ja wird im Destruktor des Parent das Control zerstört. Wenn nicht bleibt die Instanz erhalten.

    Generell würde ich jede Instanz die ich erzeuge auch wieder zerstören. Bei PageControl aber würde so etwas zu Fehlern beim Beenden der Anwendung führen. Ist wohl noch ein Bug.

    Deshalb darfst du beim PageControl die Sheets nicht zerstören. Das macht das PageControl.



  • Im konkreten Fall ist allerdings die Form der Owner der TabSheets (this), also werden diese von der Form zerstört, nicht vom PageControl.

    Und die vermeintlichen Probleme beim Beenden des Programmes kann ich nicht nachvollziehen, ich kann hier nach Herzenslust TabSheets erzeugen und löschen. Und das unabhängig davon, wer der Owner der TabSheets ist.



  • Und die vermeintlichen Probleme beim Beenden des Programmes kann ich nicht nachvollziehen, ich kann hier nach Herzenslust TabSheets erzeugen und löschen. Und das unabhängig davon, wer der Owner der TabSheets ist.

    Hab gerad noch mal geschaut.War wohl ein Problem eines abgeleiteten PageControls und nicht von PageControl selbst...



  • Ok. Vielen Dank euch beiden für die Antwort.


Anmelden zum Antworten