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
DDDOriginal
2024-12-30 00:30:12596Durchsuche

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));

Eine schlanke Funktion wie diese wäre vorzuziehen:

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

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)...));
}

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!

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