Nicht unbedingt. Ich denke da an Objekte die statt direktem Zugriff auf die Daten ein Interface dafür bieten was du mit den Daten so anstellen willst.
Das geht in meinem Fall nur begrenzt, da viele Klassen Vollzugriff benötigen (z.B. muss ein sf::
Sprite auf ein sf::Image verweisen).
Nicht alle, nur die die er verwaltet. Ist eben die Frage ob es notwendig wird bestimmte Ressourcen zur Laufzeit wieder freizugeben.
Die Möglichkeit zur Freigabe möchte ich schon haben, allerdings tendiere ich dazu, dass nur unbenutzte Ressourcen freigegeben können. Für eine erzwungene Freigabe könnte ich shared_ptr ohnehin nicht nehmen.
Das Problem bei rohen Zeigern ist, dass ich nicht kontrollieren kann, ob eine Ressource noch benutzt wird. Strategien wie "gebe frei sobald unbenutzt" funktionieren also nicht mehr, der Benutzer muss alles explizit befehlen (oder auf den Destruktor warten). Zusätzlich kann es zu Dangling-Pointers kommen, falls aus Versehen zu früh freigegeben wird. Von daher sind Smart-Pointer schon praktisch. Ich denke auch, der Overhead des Reference-Counters und allfälliger Synchronisierungen ist akzeptabel.