Smartpointer mit eigenem Allokator?



  • Gut dass ich "vermutlich" geschreiben habe 🙂 Ich hatte deine struct A falsch verstanden, ich dachte du willst pro Resource eine eigene Instanz von struct A anlegen. Quasi nochmal nen Wrapper um den Smart-Pointer, damit du bei der Verwendug den Allokator nicht mehr angeben musst. Und das fände ich schrecklich 😉

    Auch mit diesen neuen Informationen bleibe ich aber bei meinem Vorschlag. Zumindest fände ich es wichtig wenn man der Klasse A alles nötige für die Erzeugung + Zerstörung von Objekten über ein einziges Template Parameter mitgibt. Bzw. von mir aus auch über zwei. Aber nicht eins per Template-Paramter und das andere hardcoded.

    In deinem make_my_smartpointer Beispiel ist es ja so, dass wenn du make_my_smartpointer anpasst, du auch alle Instanzierungen von A-Templates (oder A-ähnlichen B, C, D-Templates) anpassen musst*. Damit immer der passende Deleter übergeben wird. Was mMn. nicht gut ist. Wenn X zu Y passen muss, dann sollte das verwendete System mMn. auch sicherstellen dass immer zusammenpassende X und Y verwendet werden.

    *: OK, wenn du wirklich nur einen einzigen Deleter im ganzen Programm verwendest, dann nicht, dann musst du tatsächlich nur make_my_smartpointer und diesen einen Deleter anpassen. Ist dann aber weniger flexibel, da du dann nicht verschiedene Allokatoren für verschiedene Dinge verwenden kannst. Trotzdem finde ich dass die beiden zusammengehören, und daher auch gemeinsam an Templates übergeben werden sollten.



  • hustbaer schrieb:

    Auch mit diesen neuen Informationen bleibe ich aber bei meinem Vorschlag. Zumindest fände ich es wichtig wenn man der Klasse A alles nötige für die Erzeugung + Zerstörung von Objekten über ein einziges Template Parameter mitgibt. Bzw. von mir aus auch über zwei. Aber nicht eins per Template-Paramter und das andere hardcoded.

    In deinem make_my_smartpointer Beispiel ist es ja so, dass wenn du make_my_smartpointer anpasst, du auch alle Instanzierungen von A-Templates (oder A-ähnlichen B, C, D-Templates) anpassen musst*. Damit immer der passende Deleter übergeben wird. Was mMn. nicht gut ist. Wenn X zu Y passen muss, dann sollte das verwendete System mMn. auch sicherstellen dass immer zusammenpassende X und Y verwendet werden.

    Ok, das stimmt natürlich... dann werde ich wohl dazu übergehen ab jetzt immer einfach einen Factory template Parameter für die jeweiligen Klassen zu definieren.

    Weil nochmal will ich mir diesen Stress, in allen Klassen die Allkoation zu refactoren, gerne ersparen. Wundert mich eigentlich dass mir so ein Pattern dann noch nie über den Weg gelaufen ist, weil eigentlich hat man das Problem ja immer wenn man eigene Allokatoren verwenden will...



  • Naja in den wenigsten Programmen kommen eigene Allokatoren zum Einsatz 😉


Anmelden zum Antworten