Verwendung von globalen Form1-> oder this->?



  • Inwiefern kann die Verwendung von Form1-> schädlich sein?



  • Wenn ihr unbedingt die Codevervollständigung wollt dann verwendet wenigstens "this->", damit werden alle diese Probleme umgangen.

    Hinter this muss doch auch keine gültige Instanz stehen ???



  • this schrieb:

    Hinter this muss doch auch keine gültige Instanz stehen ???

    Ach, und wieso nicht?



  • Hallo

    Wenn man korrekten Code schreibt ist hinter this immer eine gültige Instanz. Die einzige Möglichkeit this ungültig werden zu lassen ist sowas :

    TForm1* myform;
    myform->DoSomething(); // Im Aufruf von DoSomething zeigt this nicht auf eine gültige Instanz
    

    aber da ist nicht this das Problem sondern nur das Symptom...

    bis bald
    akari



  • Stimmt, unter bestimmten Voraussetzungen lassen sich Klassenfunktionen ohne Klasseninstanz verwenden (sind ja statisch). Ist, meiner Meinung nach, aber schlechter Stil und sollte vermieden werden.



  • Joe_M. schrieb:

    Stimmt, unter bestimmten Voraussetzungen lassen sich Klassenfunktionen ohne Klasseninstanz verwenden (sind ja statisch). Ist, meiner Meinung nach, aber schlechter Stil und sollte vermieden werden.

    Wenn ich neue Formulare aus der Liste der automatisch erstellten Forms herausnehme, dann haben wir doch schon so einen Fall.
    Ist das auch schlechter Stil ?
    Natürlich muss ich vorkehrungen treffen, das man beim Zugriff auf this nicht ins Leere greift.



  • Hallo

    this schrieb:

    Joe_M. schrieb:

    Stimmt, unter bestimmten Voraussetzungen lassen sich Klassenfunktionen ohne Klasseninstanz verwenden (sind ja statisch). Ist, meiner Meinung nach, aber schlechter Stil und sollte vermieden werden.

    Wenn ich neue Formulare aus der Liste der automatisch erstellten Forms herausnehme, dann haben wir doch schon so einen Fall.
    Ist das auch schlechter Stil ?

    Meiner Meinung nach nicht. In meinem großem Projekt habe ich ca. 40 Formulare, aber nur 2 davon werden automatisch erzeugt. Alle anderen nur wenn benötigt. Das senkt zum einem Ladezeit als auch Speicherverbrauch, andereseits vermindet es den Gebrauch von globalen Instanzen.

    Natürlich muss ich vorkehrungen treffen, das man beim Zugriff auf this nicht ins Leere greift.

    Nocheinmal : Wenn this in nichtstatischen Methoden verwendet werden kann ist es auch per Definition gültig! Wenn this nicht gütig sein sollte liegt der eigentliche Fehler woanders, aber bestimmt nicht in der Verwendung von this (this wird schließlich impliziet immer verwendet wenn auf Membervariablen zugegriffen wird).

    bis bald
    akari



  • Hallo

    Abgetrennt von diesem Ursprung.

    bis bald
    akari



  • Ähm, war jetzt in den folgenden Beiträgen ne Antwort zum Startbeitrag versteckt? Für mich jetzt nicht so ganz erkennbar, falls dem so ist. Wäre sehr nett dies nochmal etwas einfacher zu erklären. 🤡



  • Hallo

    Die eigentlichen Antworten zur ersten Frage diesen Threads hier waren

    Joe_M. schrieb:

    Die Verwendung von Form1-> innerhabl der Form kann deswegen zur Problemen führen, weil Form1 ein globaler Zeiger aus der TApplication-Instanz ist. Sobald man jetzt manuell eine Instanz der Form erzeugt, greift man über Form1 aber auf den globalen Zeiger und nicht auf die manuell erzeugte Instanz. Brauchen tut man es eh nicht, wenn man aber der Bequemlichkeit halber nicht darauf verzichten möchte, sollte man this-> verwenden.

    akari schrieb:

    "Form1->" bindet die Anweisung über den globalen Pointer Form1 an genau eine Forminstanz. Das erfordert zunächst einmal das hinter Form1 auch wirklich eine gültige Instanz steht, was nicht immer der Fall sein muß. Des weiteren ist es ja durchaus möglich mehrere dynamische Instanzen einer Formklasse anzulegen, wo dann aber jeder feste Verweis auf eine einzelne Instanz stört.

    Wenn ihr unbedingt die Codevervollständigung wollt dann verwendet wenigstens "this->", damit werden alle diese Probleme umgangen.

    bis bald
    akari



  • akari schrieb:

    Wenn ihr unbedingt die Codevervollständigung wollt dann verwendet wenigstens "this->"

    Oder drückt einfach Strg+Space 😉


Anmelden zum Antworten