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:
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!