Heim > Backend-Entwicklung > C++ > „std::make_shared' vs. „std::shared_ptr': Was ist effizienter?

„std::make_shared' vs. „std::shared_ptr': Was ist effizienter?

Barbara Streisand
Freigeben: 2024-12-14 02:04:10
Original
642 Leute haben es durchsucht

`std::make_shared` vs. `std::shared_ptr`: Which is More Efficient?

Erkennen der Effizienz von std::make_shared im Vergleich zur direkten std::shared_ptr-Nutzung

Verstehen des Unterschieds in der Effizienz zwischen std::make_shared und dem direkten Erstellen eines std: :shared_ptr kann eine verwirrende Aufgabe sein. Hier vertiefen wir uns in einen detaillierten Vergleich, um die Feinheiten jeder Methode zu verdeutlichen.

Erkundung der Konstruktionssequenz

Beachten Sie die folgenden Codeausschnitte:

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
std::shared_ptr<Object> p2(new Object("foo"));
Nach dem Login kopieren

Direkt std::shared_ptr Konstruktion:

  1. Heap-Zuweisung für Objekt
  2. Gemeinsamer Zeigerkonstruktor, der einen weiteren Heap-Bereich für Metadaten zuweist

std::make_shared Verwendung:

  1. Kombinierte Heap-Zuweisung, umfassend sowohl Objekt- als auch Metadaten

Entlarvung des Effizienzgewinns

Der Hauptunterschied liegt in der Anzahl der erforderlichen Heap-Zuweisungen:

  • make_shared: 1 Zuordnung
  • Direct shared_ptr: 2 Zuweisungen

Diese einzelne Zuweisung in make_shared macht einen expliziten neuen Aufruf überflüssig, was zu einer höheren Effizienz führt.

Überlegungen zu Ausnahmen

Vor C 17:
Die Ausnahmebehandlung konnte zuvor als Rohzeiger verheerende Folgen haben wurde möglicherweise nicht sicher an den shared_ptr-Konstruktor übergeben.

C 17 und höher:
Dieses Problem wurde dank Änderungen in der Auswertungsreihenfolge der Funktionsargumente behoben. Heutzutage werden Ausnahmen ordnungsgemäß behandelt, um die Speicherintegrität sicherzustellen.

Ein kleiner Nachteil von std::make_shared

Wie Casey betonte, ergibt sich ein potenzieller Nachteil aus der Einzelzuweisung:

  • Der kontrollierte Speicher kann erst freigegeben werden, wenn der Steuerblock nicht mehr verwendet wird, wodurch sich die Speichererhaltung aufgrund eines schwachen Zeigers möglicherweise verlängert Referenzen.

Das obige ist der detaillierte Inhalt von„std::make_shared' vs. „std::shared_ptr': Was ist effizienter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage