Heim >Backend-Entwicklung >C++ >Warum fehlte „std::make_unique' in C 11 und wie verbessert Perfect Forwarding seine Funktionalität?
Trotz der Vorteile der Reduzierung der Ausführlichkeit und der Unterstützung der Typsicherheit, std::make_unique war nicht im C 11-Standard enthalten. Herb Sutter, Vorsitzender des C-Standardisierungsausschusses, führt dieses Versäumnis auf ein Versehen zurück.
In der benutzerdefinierten make_unique-Implementierung std::forward< Args>(args)... wird verwendet, um die Argumente perfekt an den Konstruktor von T weiterzuleiten. Diese Technik stellt sicher, dass die Argumente als optimal übergeben werden R-Wert- (oder L-Wert-)Referenzen.
Wenn std::forward auf eine L-Wert-Referenz angewendet wird, wird diese in eine R-Wert-Referenz konvertiert, sodass der Konstruktor direkt an einen R-Wert binden kann. Wenn umgekehrt std::forward auf eine R-Wert-Referenz angewendet wird, passiert nichts.
Die make_unique-Implementierung erstellt eine neue Instanz von T, indem sie Speicher mit neuem T zuweist und dann aufruft seinen Konstruktor mit den weitergeleiteten Argumenten. Die Verwendung von Perfect Forwarding verhindert unnötige Kopien oder unnötige temporäre Objekte.
Obwohl std::make_unique nicht Teil von C 11 ist, hat es sich zu einer weit verbreiteten Konvention für die präzise Erstellung eindeutiger Zeiger entwickelt. Es verbessert die Lesbarkeit des Codes, vereinfacht die Typverarbeitung und sorgt für eine effiziente Ressourcenverwaltung. Seine erwartete Aufnahme in C 14 unterstreicht seine Bedeutung in der modernen C-Programmierung weiter.
Das obige ist der detaillierte Inhalt vonWarum fehlte „std::make_unique' in C 11 und wie verbessert Perfect Forwarding seine Funktionalität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!