Heim > Backend-Entwicklung > C++ > Hauptteil

Soll ich „shared_ptr' als Wert oder als Referenz übergeben?

Barbara Streisand
Freigeben: 2024-10-31 14:24:02
Original
109 Leute haben es durchsucht

Should I Pass `shared_ptr` by Value or by Reference?

Übergabe gemeinsamer Zeiger: als Referenz oder als Wert

Bei der Übergabe eines shared_ptr (von Boost oder C 11 STL) an eine Funktion wird der Die Wahl zwischen der Übergabe per Konstantenreferenz (void foo(const shared_ptr& p)) oder per Wert (void foo(shared_ptr p)) war ein Diskussionsthema.

Traditionell ist es so Es wurde angenommen, dass die Übergabe per Referenz schneller wäre, da dadurch unnötige Kopiervorgänge vermieden würden. Wie jedoch von Experten bei C and Beyond 2011 (Scott, Andrei und Herb) diskutiert wurde, ist dies nicht mehr der Fall.

Sollten Sie vom Wert oder vom Verweis ausgehen?

Sofern nicht ausdrücklich die Notwendigkeit besteht, den Besitz eines Objekts zu teilen (z. B. zwischen Datenstrukturen oder Threads), gibt es keinen zwingenden Grund, einen shared_ptr als Wert zu übergeben. Die Übergabe per Konstantenreferenz wird aus folgenden Gründen bevorzugt:

  • Leistung: Die Übergabe per Konstantenreferenz ist in der Regel schneller als das Kopieren des shared_ptr nach Wert, insbesondere bei großen Objekten. Dies liegt daran, dass nur der Zeiger selbst übergeben wird und nicht das gesamte Objekt.
  • Richtigkeit: Durch die Übergabe per const-Referenz wird sichergestellt, dass der shared_ptr nicht innerhalb der Funktion geändert werden kann. Dies trägt dazu bei, versehentliche Änderungen am gemeinsam genutzten Objekt zu verhindern.

Wann sollte ein Wert übergeben werden?

Der einzige Zeitpunkt, zu dem es ratsam ist, einen shared_ptr als Wert zu übergeben, ist wann Ziel ist es, das Eigentum am Objekt auf die Funktion zu übertragen. Dies ist normalerweise der Fall, wenn die Funktion die Verantwortung für die Verwaltung der Lebensdauer des Objekts übernehmen muss.

Zusätzliche Überlegungen

Für eine optimale Leistung ist es wichtig zu berücksichtigen, ob der shared_ptr kann zugoptimiert werden. Wie Scott Meyers erklärt, kann die Bewegungsoptimierung unnötige Kopiervorgänge überflüssig machen. Diese Optimierung ist jedoch nur in bestimmten Versionen von C verfügbar.

Das obige ist der detaillierte Inhalt vonSoll ich „shared_ptr' als Wert oder als Referenz übergeben?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!