Heim >Backend-Entwicklung >C++ >Wie erreicht „std::make_unique' eine perfekte Weiterleitung in C?

Wie erreicht „std::make_unique' eine perfekte Weiterleitung in C?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-26 02:40:09317Durchsuche

How Does `std::make_unique` Achieve Perfect Forwarding in C  ?

make_unique und Perfect Forwarding

In C 11 gibt es keine integrierte std::make_unique-Funktion, die eine präzise Instanziierung eindeutiger Zeiger ermöglichen würde. Entwickler fanden die Syntax

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));

unnötig ausführlich und schlugen eine alternative Syntax vor:

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);

Dieser Ansatz vereinfacht die Erstellung eindeutiger Zeiger und reduziert die Codeduplizierung.

Die vorgeschlagene Implementierung von std::make_unique nutzt die perfekte Weiterleitung über std::forward, um Argumente an den Konstruktor zu übergeben. Durch die perfekte Weiterleitung wird sichergestellt, dass Funktionsparameter auf die effizienteste Weise übergeben werden und dabei ihr ursprünglicher Typ und ihre ursprüngliche Wertkategorie (z. B. L-Werte, R-Werte) erhalten bleiben.

In der make_unique-Implementierung ist die Syntax

std::forward<Args>(args)...

kann wie folgt interpretiert werden:

  • std::forward: Typ Merkmale, die die Wertkategorie (z. B. L-Wert oder R-Wert) von Argumenten ableiten.
  • args...: Erweiterung der variablen Argumente in einzelne Parameter.

Zusammen erreichen sie Perfektion Weiterleitung, indem sichergestellt wird, dass Argumente mit der richtigen Wertkategorie und dem richtigen Typ an den Konstruktor übergeben werden.

Herb Sutter, Vorsitzender von Das C-Standardisierungskomitee hat das Versehen anerkannt, std::make_unique nicht in C 11 aufgenommen zu haben, und hat angegeben, dass es in einer zukünftigen Version hinzugefügt wird. Die vorgeschlagene Implementierung ist identisch mit der in der Frage angegebenen.

Mit der Einführung von C 14 wurde std::make_unique standardisiert und stellte die erforderliche prägnante Syntax zum Erstellen eindeutiger Zeiger bereit.

Das obige ist der detaillierte Inhalt vonWie erreicht „std::make_unique' eine perfekte Weiterleitung in C?. 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