Heim  >  Artikel  >  Backend-Entwicklung  >  Warum enthält der C-Standard kein nicht-atomares „std::shared_ptr'?

Warum enthält der C-Standard kein nicht-atomares „std::shared_ptr'?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 02:03:28861Durchsuche

Why Doesn't the C   Standard Include a Non-Atomic `std::shared_ptr`?

Nicht-atomare intelligente Zeiger: Erkundung der Abwesenheit im C-Standard

Im Bereich der C-Speicherverwaltung ist der std::shared_ptr gilt aufgrund seiner atomaren Operationen als außergewöhnlich intelligenter Zeiger. Dies wirft die Frage auf: Warum gibt es in der Standardspeicherbibliothek kein nicht-atomares Gegenstück?

1. Nicht-atomare Alternativen zu std::shared_ptr

Während std::shared_ptr atomares Verhalten bietet, rechtfertigen einige Szenarien einen solchen Overhead möglicherweise nicht. Um dieses Problem zu lösen, sind externe Bibliotheken entstanden, die nicht-atomare intelligente Zeiger mit Referenzzählung bereitstellen. Der Standard-Speicherbibliothek selbst fehlen jedoch solche Angebote.

2. Das Fehlen in C 11: Gründe und Debatte

Trotz des wahrgenommenen Nutzens wurde ein Vorschlag für eine nicht-atomare Version von std::shared_ptr während des C 11-Standardisierungsprozesses abgelehnt. Mehrere Argumente haben diese Entscheidung vorangetrieben:

  • Missbrauchspotenzial: Nicht-atomare intelligente Zeiger könnten versehentlich in Multithread-Kontexten verwendet werden, was zu schwer zu debuggenden Fehlern führt.
  • Konsistenz und Interoperabilität: Die Aufrechterhaltung eines einzigen „universellen“ shared_ptr mit atomarer Funktionalität ermöglicht eine reibungslosere Interoperabilität zwischen C-Bibliotheken, einschließlich solchen von Drittanbietern.
  • Leistungsüberlegungen: Während atomare Operationen Leistungseinbußen verursachen, sind sie nicht unerschwinglich teuer, insbesondere wenn Bewegungskonstruktion und Bewegungszuweisung verwendet werden.
  • Anpassungsoptionen: Wenn ein Programmierer nicht-atomares Verhalten erfordert, Sie werden nicht daran gehindert, ihre eigene benutzerdefinierte Referenzzählungs-Smart-Pointer-Implementierung zu erstellen.

Schlussfolgerung

Das Fehlen eines nicht-atomaren std::shared_ptr in Der C-Standard ist das Ergebnis einer bewussten Entscheidung, die auf Bedenken hinsichtlich möglichem Missbrauch, Konsistenz, Leistung und Anpassungsflexibilität basiert. Während externe Bibliotheken solche Alternativen bieten können, hat der Standard selbst den Vorteilen eines universellen, atomaren Smart Pointers für die Speicherverwaltung Priorität eingeräumt.

Das obige ist der detaillierte Inhalt vonWarum enthält der C-Standard kein nicht-atomares „std::shared_ptr'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn