Heim >Backend-Entwicklung >C++ >Warum fehlte „std::make_unique' in C 11 und wie verbessert Perfect Forwarding seine Funktionalität?

Warum fehlte „std::make_unique' in C 11 und wie verbessert Perfect Forwarding seine Funktionalität?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-14 01:33:10938Durchsuche

Why Was `std::make_unique` Missing from C  11, and How Does Perfect Forwarding Enhance Its Functionality?

make_unique und Perfect Forwarding

Warum kein std::make_unique in C 11?

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.

std::forward und Perfect Forwarding erklärt

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.

Implementierungsdetails

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.

Fazit

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!

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