Heim > Backend-Entwicklung > C++ > Warum fehlt „std::make_unique' in C 11 und wie funktioniert Perfect Forwarding bei seiner Implementierung?

Warum fehlt „std::make_unique' in C 11 und wie funktioniert Perfect Forwarding bei seiner Implementierung?

DDD
Freigeben: 2024-12-30 00:30:12
Original
608 Leute haben es durchsucht

Why is `std::make_unique` Missing in C  11, and How Does Perfect Forwarding Work in its Implementation?

Make_unique und Perfect Forwarding

F: Warum fehlt die zentralisierte make_unique-Funktion in der C 11-Standardbibliothek?

Viele finden das Konstruktions-Boilerplate für eindeutige Zeiger unpraktisch. Zum Beispiel:

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
Nach dem Login kopieren

Eine schlanke Funktion wie diese wäre vorzuziehen:

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

F: Hier ist ein make_unique-Implementierungsversuch, aber etwas an std::forward scheint fehlerhaft zu sein. Was macht es und wie soll es verwendet werden?

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
Nach dem Login kopieren

A: Das Weglassen von std::make_unique in C 11 wurde als Versehen anerkannt: Es wurde in C 14 hinzugefügt.

Der std::forward(args)-Ausdruck verwendet eine perfekte Weiterleitung, um einen künstlichen Verweis auf die Argumente ...args, Dadurch können sie an den neuen Ausdruck in T(std::forward(args)...) weitergeleitet werden und das Konstruktionsverhalten für L-Werte und R-Werte vereinheitlicht werden.

Das obige ist der detaillierte Inhalt vonWarum fehlt „std::make_unique' in C 11 und wie funktioniert Perfect Forwarding bei seiner Implementierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage