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 vonstruct 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 schrecklichAuch 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 dumake_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 dumake_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