Zitat Zitat von Kyuu Beitrag anzeigen
Inwiefern spielt der overhead beim Allozieren des reference counters für euch eine Rolle? Solange ihr nicht in einer kritischen Schleife die Objekte immer wieder erzeugt, ist dieser zusätzliche overhead vernachlässigbar, da mit ihm nur bei der Objekterzeugung zu rechnen ist. Intrusive reference counting aus dem Grund zu wählen, weil es den overhead beim Allozieren des reference counters vermeidet ist fragwürdig, ich hoffe das ist nur deine Interpretation. Intrusive reference counting ist praktisch etwa wenn reference counting über Programm/Bibliothek-Grenzen hinweg funktionieren soll, oder wenn die Objekte in memory pools alloziert werden.
Ich empfinde die Optimierung durch das auslassen von shared_ptr ähnlich fragwürdig was das weg-optimieren des 2. Vektors der auf freie Felder speichert. Allokation ist eine teure operation, das könnte einen Unterschied machen wenn viele Objekte neu erstellt und entfernt werden (bei partikeln etwa?). Dazu kommt auch, dass dein shared_ptr zwei sachen referenziert (counter und pointer) und damit doppelt so groß ist. Wenn du also über einen Array mit shared_pointern itereierst kannst du genauso gut über eine Vektor doppelter größe mit raw-pointer iterieren. (vergleichbar mit dem Overhead, wenn man bei meiner Struktur über 0 pointer iteriert)

Im übrigen ist fast alles was wir hier diskutieren premature optimization. Just sayin'.

Zitat Zitat
Ich kann mir Situationen vorstellen, in denen raw pointer nicht reichen würden.
Care to share? Ich kann mir keine solche Situation vorstellen, die man nicht genauso gut mit einer Routine im Destuktor lösen kann.

Zitat Zitat
Übrigens fällt mir gerade ein Problem bei deiner Struktur weiter oben ein. Dein Argument war, dass du null zurückgeben kannst, wenn ein Objekt gelöscht wurde. Dem entnehme ich, dass bei dir Situationen eintreten können, in denen Objekte referenziert werden, die bereits gelöscht wurden. Was nun, wenn ein Objekt gelöscht wird und die Stelle im Vektor durch ein neues ersetzt wird, noch bevor der Code, der das gelöschte Objekt referenziert, realisiert, dass das referenzierte Objekt nicht mehr existiert?
Da hast du recht. In dem Fall verhält sich das System fehlerhaft.
Also ich vermute mal das Argument mit sicheren zugriff per id zieht nicht wirklich.
Es ist also lediglich eine Struktur in der man schnell einfügen und entfernen kann, direkten zugriff hat und bei der auch iteration funktioniert. (mit einem gewissen overhead)
Naja, es funktioniert für meine Anwendungen gut genug.