RAII automatisieren



  • Hab mal sowas ähnliches versucht, allerdings ohne Exceptions. Da kam sowas raus: Resourceholder. Die meisten fanden aber, dass man das lieber selbst tippen sollte, und dass man da nichts abkürzen kann, gepaart mit wilden Hinweisen auf uniquehandle die ich nicht kenne.



  • Mh der ScopeGuard (unter anderem der von Alexandrescu) sieht ja gar nicht mal so schlecht und schwer aus.



  • Als Hinweis für die, die sich das verlinkte Video von Alexandrescu nicht angesehen haben, sei erwähnt, dass es in der folly-Bibliothek eine Implementation der C11-Version des ScopeGuard gibt.



  • Skym0sh0 schrieb:

    Aber das Ganze soll auch nur ein Beispiel sein, denn eigentlich will ich nicht für alles und jede Kleinigkeit eine neue RAII Klasse schreiben.

    Eigentlich immer ist das ein Zeichen für schlechtes Design.
    Die IOStreams sind einfach nicht gemacht für RAII und Exceptions. Exceptions hat man nachträglich hineingeflickt (wobei das nicht wirklich häufig benutzt wird), aber RAII fehlt halt völlig.

    Wenn du einigermassen guten Code schreibst brauchst du sowas nicht.



  • iobash schrieb:

    aber RAII fehlt halt völlig.

    Der Konstruktor konstruiert, der Destruktor zerstört. Was genau fehlt dir für RAII?

    Edit: Dass man Exceptions manuell aktivieren muss, stört mich natürlich auch.



  • Ok, RAII hat man auch teilweise reingeflickt. Siehe die Methoden open() und close().
    Dass es nicht vollständig war sieht man an diesem Beispiel.



  • iobash schrieb:

    Ok, RAII hat man auch teilweise reingeflickt. Siehe die Methoden open() und close().
    Dass es nicht vollständig war sieht man an diesem Beispiel.

    Ich glaube, du solltest dich nochmals genauer mit dem Begriff RAII auseinandersetzen. open() und close() sind eben gerade keine Beispiele dafür, weil sie manuell aufgerufen werden.

    Wie schon von Michael E. gesagt gibt es dafür Konstruktor und Destruktor. RAII wurde also nicht "reingeflickt", und fehlt schon gar nicht völlig...



  • iobash schrieb:

    Ok, RAII hat man auch teilweise reingeflickt. Siehe die Methoden open() und close().
    Dass es nicht vollständig war sieht man an diesem Beispiel.

    Die Methoden open() und close() gibt es dafür, dass man das Objekt auch später anlegen bzw. früher zerstören kann. Es ist aber nicht notwendig.



  • Ja, das gleiche ist auch mit Window Klassen und ähnlichem.
    RAII heißt lediglich, dass das Objekt vollständig im Destruktor zerstört werden kann.



  • hjjjjj schrieb:

    Die Methoden open() und close() gibt es dafür, dass man das Objekt auch später anlegen bzw. früher zerstören kann. Es ist aber nicht notwendig.

    Nein, so wuerde ich das nicht beschreiben. Datei oeffnen und schliessen ist einfach "unabhaengig" von der Objektkonstruktion.


Anmelden zum Antworten