Heim > Backend-Entwicklung > C++ > Sollte ich shared_ptrs als Referenz oder als Wert in C übergeben?

Sollte ich shared_ptrs als Referenz oder als Wert in C übergeben?

Susan Sarandon
Freigeben: 2024-11-02 14:39:02
Original
891 Leute haben es durchsucht

Should I Pass shared_ptrs by Reference or by Value in C  ?

Übergabe von Shared_Ptrs: Referenz vs. Wert

In C beim Übergeben eines shared_ptr (entweder die Boost-Implementierung oder die C 11 STL), Entwickler haben die Möglichkeit, es als Referenz oder als Wert zu übergeben. Es stellt sich die Frage: Welcher Ansatz ist angemessener?

Const-Referenzmethode

Die Übergabe per Const-Referenz (void foo(const shared_ptr& p)) hat keine Leistungsvorteil gegenüber der Wertübergabe. Dieses Missverständnis wurde von den C-Koryphäen Scott Meyers, Andrei Alexandrescu und Herb Sutter während der „Ask Us Anything“-Sitzung bei C and Beyond 2011 angesprochen.

Passing-by-Value-Methode

Die Wertübergabe (void foo(shared_ptr p)) wird im Allgemeinen aus zwei Gründen bevorzugt:

  1. Kein unnötiger Overhead: Die Wertübergabe vermeidet die Erstellung eines temporäre Referenz, die andernfalls unnötigen Overhead verursachen würde.
  2. Konsistenz mit der Semantik: Die Übergabe von Werten stimmt mit der Semantik anderer Containertypen (z. B. Vektoren, Listen) überein und vermeidet Verwirrung bei der Codierungspraxis .

Alternativer Ansatz

In bestimmten Szenarien, in denen das Eigentum geteilt werden muss, kann jedoch eine Wertübergabe erforderlich sein. Wenn beispielsweise der Besitz zwischen Datenstrukturen oder Threads übertragen wird, kann die Übergabe als Wert die Übertragung des Besitzes erleichtern und gleichzeitig eine ordnungsgemäße Speicherverwaltung gewährleisten.

Fazit

Übergabe im Allgemeinen Eine „shared_ptr by const“-Referenz bietet keine konkreten Leistungsvorteile und wird nicht empfohlen. Die Wertübergabe ist der bevorzugte Ansatz, um Konsistenz sicherzustellen und unnötigen Overhead zu vermeiden.

Das obige ist der detaillierte Inhalt vonSollte ich shared_ptrs als Referenz oder als Wert in C ü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