Heim > Backend-Entwicklung > C++ > Hauptteil

Wie implementiert man eine benutzerdefinierte „make_unique'-Funktion in C 11?

Linda Hamilton
Freigeben: 2024-10-30 00:03:29
Original
683 Leute haben es durchsucht

How to Implement a Custom `make_unique` Function in C  11?

Erstellen einer benutzerdefinierten Implementierung von make_unique in C 11

Die Funktion make_unique ist eine praktische Methode zum Erstellen und Verwalten eindeutiger Zeiger in C. Es ermöglicht Programmierern, Argumente direkt an den Konstruktor des verwiesenen Objekts zu übergeben und gleichzeitig sicherzustellen, dass das Eigentum ordnungsgemäß übertragen wird. Allerdings unterstützen einige Compiler make_unique möglicherweise nicht nativ. In solchen Fällen ist es notwendig, eine benutzerdefinierte Version der Funktion zu implementieren.

Benutzerdefinierte make_unique-Funktion

Um eine benutzerdefinierte make_unique-Funktion zu implementieren, können Sie den folgenden Codeausschnitt verwenden:

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

Diese benutzerdefinierte Implementierung nutzt unique_ptr und new der Standardbibliothek, um einen eindeutigen Zeiger zu erstellen. Es leitet Argumente mithilfe von std::forward an den Konstruktor des Objekts weiter, auf das verwiesen wird, und stellt so eine ordnungsgemäße Wertübertragung sicher.

Vergleich mit der nativen Implementierung

Die benutzerdefinierte Funktion make_unique funktioniert ähnlich wie die native Version. In bestimmten Szenarien kann es jedoch zu Einschränkungen kommen. Es ist erwähnenswert, dass die in C 14 hinzugefügte native make_unique-Funktion bestimmte Randfälle und Optimierungen berücksichtigt, die in der benutzerdefinierten Implementierung möglicherweise nicht vorhanden sind.

Alternative benutzerdefinierte Implementierung

Eine alternative benutzerdefinierte Implementierung, die bietet mehr Vielseitigkeit und verarbeitet Arrays, finden Sie in der akzeptierten Antwort von sasha.sochka auf Stack Overflow:

template <typename T>
std::unique_ptr<T> make_unique(T* ptr) {
  return std::unique_ptr<T>(ptr);
}

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

Fazit

Durch die Verwendung der bereitgestellten Codefragmente können Sie eine benutzerdefinierte Implementierung implementieren make_unique-Funktion in C 11. Während die native Implementierung vorzuziehen ist, wenn sie von Ihrem Compiler unterstützt wird, bieten die hier besprochenen benutzerdefinierten Versionen bei Bedarf eine praktikable Lösung.

Das obige ist der detaillierte Inhalt vonWie implementiert man eine benutzerdefinierte „make_unique'-Funktion in C 11?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!