unique_ptr aus shared_ptr erstellen
-
Ich habe einen komplizierten Algorithmus, bei dem ich wirklich froh bin, shared_ptr verwenden zu können. Diesen mit unique_ptr und rohen Zeigern darauf umzusetzen würde einiges an Unsicherheit und unnötiger Zusatzarbeit bringen. Aber am Schluss sind alle shared_ptr unique(), das kann ich beweisen.
In der Schnittstelle hätte ich gerne eine Liste von unique_ptrs, da dadurch ersichtlich ist, dass man ein Element verändern kann, ohne irgendwelche Nebeneffekte an den anderen zu erzeugen.
Das Problem ist nun, wie krieg ich einen unique_ptr von einem garantiert uniquen shared_ptr ohne das darunterliegende Objekt zu kopieren? Kennt jemand einen Hack dafür?
-
Als Deleter einen Funktor verwenden, der deaktiviert werden kann. Der deaktivierte Deleter führt kein
deletemehr aus, d.h. du kannst dir mitget()den rohen Zeiger klauen und seelenruhigreset()ausführen.
-
Vielen Dank, das hat bestens geklappt.
-
Vielelicht ist das sogar eine Situation, bei der man gefahrlos rohe Zeiger nutzen kann. Am besten Du erklärst das, was Du eigentlich machen willst, genauer. Dann kann man Dir eventuell auch einen viel eleganteren Lösungsweg aufzeigen...