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.
Beachten Sie die folgenden Codeausschnitte:
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo"));
Direkt std::shared_ptr Konstruktion:
std::make_shared Verwendung:
Der Hauptunterschied liegt in der Anzahl der erforderlichen Heap-Zuweisungen:
Diese einzelne Zuweisung in make_shared macht einen expliziten neuen Aufruf überflüssig, was zu einer höheren Effizienz führt.
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.
Wie Casey betonte, ergibt sich ein potenzieller Nachteil aus der Einzelzuweisung:
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!