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