Funktion für Smart-Pointer mit Null-Deleter



  • ad 1) Ich hatte mal gesucht, aber nix gefunden. Hab' mir dann ein NoOperation Template geschrieben, das mit beliebigen Parametern aufrufbar ist, und einfach nix macht

    ad 3) IMO ganz klar nen Zeiger.



  • hustbaer schrieb:

    ad 1) Ich hatte mal gesucht, aber nix gefunden. Hab' mir dann ein NoOperation Template geschrieben, das mit beliebigen Parametern aufrufbar ist, und einfach nix macht

    Was ist denn bei dir genau das NoOperation -Template – der NullDeleter ? Falls ja, verstehe ich das mit den beliebigen Parametern nicht ganz. Wann ruft man dessen operator() mit mehr als einem Parameter auf?

    hustbaer schrieb:

    ad 3) IMO ganz klar nen Zeiger.

    Aus Neugier: Verwendest du normalerweise auch die Policy "Zeigerparameter -> NULL ist möglich, ansonsten Referenzen"?



  • Hat niemand schon mal was Ähnliches benötigt und einen guten Namen parat? 😉



  • Wozu brauchst du denn überhaupt einen Smart-Pointer, wenn der sich nicht selber um die Speicherverwaltung kümmern soll?

    PS: Was hältst du von "LazyPtr"?



  • CStoll schrieb:

    Wozu brauchst du denn überhaupt einen Smart-Pointer, wenn der sich nicht selber um die Speicherverwaltung kümmern soll?

    Für generische Schnittstellen. Ein paar Klassen von mir sollen z.B. shared_ptr<Image> abspeichern und sich so eine Image-Ressource teilen und wenn nötig automatisch freigeben. Allerdings kann es Fälle geben, in denen der Aufrufer für eine genügend lange Lebenszeit garantieren kann (z.B. static -Speicherklasse). Hier wurde mir aber gesagt, dass dafür ein Custom-Deleter okay sei 🙂

    CStoll schrieb:

    PS: Was hältst du von "LazyPtr"?

    Hm, ist "lazy" in dem Zusammenhang ein verbreiteter Begriff? Ich weiss nicht, ob Leute die beschriebene Semantik damit assoziieren... Ich kenne diesen Ausdruck vor allem im Zusammenhang mit Lazy Evaluation in der funktionalen Programmierung.



  • nodelete_ptr ?



  • "NoDeletePtr" wäre ebenfalls eine Möglichkeit. Ich habe auch schon an Begriffe wie "unmanaged" gedacht, aber das verwirrt wohl eher. Oder vielleicht doch etwas in Richtung "NoOp", damit das Nichts-Tun betont wird. Gibts dafür vielleicht bessere Ausdrücke (mir fällt nur gerade "idle" ein, was hier aber nicht allzu gut passt). Doch wahrscheinlich ist ein Lesen der Dokumentation so oder so notwendig, um sich über die Funktionalität sicher zu sein...

    Weitere Vorschläge sind gern gesehen! Auch was Punkt 3 (Referenzen vs. Zeiger) anbelangt.



  • Also im eigentlichen Sinne ist ja derjenige, der von sich aus nix tut "passiv". Von daher wäre aus dem Gesichtspunkt des "NoOpPtr" der "PassivePtr" nicht gar so abwegig. Als Programmierer allerdings, der sich von Pointer-Wrappern erwartet, dass sie irgendeine Form des Lebenszeit-Managements besitzen, wäre NullDeleterPtr wohl das ausdrucksstärkste. Da würde ich mich auch nicht darum kümmern, dass der Name eventuell zu lang ist oder sowas, irgendwie muss die Idee ja klar rüberkommen.
    Die Funktion "wrapped" einen Zeiger, ich finde, sie sollte auch einen Zeiger nehmen können, zumal man ansonsten nicht mehr mit null-zeigern hantieren könnter (was jetzt auch kein wirklicher Nachteil sein muss).



  • Hat was, danke!

    Ich bin bisher davon ausgegangen, dass man die Funktion nicht für Nullzeiger nutzt, da sie so nichts bringt. Bei einem leeren Smart-Pointer ist es normalerweise irrelevant, wie der Deleter aussieht. Aber im Prinzip gibt es keinen triftigen Grund, der gegen die Übergabe von Nullzeigern spricht...



  • SinnlosPtr



  • soft_ptr
    unreal_ptr
    couch_potaoe_ptr


Anmelden zum Antworten