Wie ich sehen kann, werden intelligente Zeiger in vielen realen C ++ - Projekten häufig verwendet.
Obwohl eine Art von intelligenten Zeigern offensichtlich für die Unterstützung von RAII- und Eigentumsübertragungen von Vorteil ist, gibt es auch einen Trend, standardmäßig gemeinsame Zeiger als " Speicherbereinigungsmethode " zu verwenden , damit der Programmierer nicht so viel über die Zuordnung nachdenken muss .
Warum sind geteilte Zeiger beliebter als die Integration eines richtigen Müllsammlers wie Boehm GC ? (Oder stimmen Sie überhaupt zu, dass sie beliebter sind als die eigentlichen GCs?)
Ich kenne zwei Vorteile herkömmlicher GCs gegenüber der Referenzzählung:
- Herkömmliche GC-Algorithmen haben kein Problem mit Referenzzyklen .
- Die Referenzzählung ist im Allgemeinen langsamer als eine richtige GC.
Was sind die Gründe für die Verwendung von intelligenten Zeigern mit Referenzzählung?
std::unique_ptr
ist dies ausreichend und daher ist der Overhead für Raw-Zeiger in Bezug auf die Laufzeitleistung gleich Null. Durch die Verwendung von "std::shared_ptr
Überall" wird auch die Besitzersemantik verdeckt, und einer der Hauptvorteile von intelligenten Zeigern als die automatische Ressourcenverwaltung entfällt.