Unterschiede zwischen std :: make_unique und std :: unique_ptr
Tut std::make_unique
haben die Effizienz von Vorteilen, wie std::makes_shared
?
Im Vergleich zu manuell Bau std::unique_ptr
:
std::make_unique<int>(1); //vs
std::unique_ptr<int>(new int(1));
InformationsquelleAutor der Frage NFRCR | 2014-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die motivation hinter
make_unique
ist in Erster Linie zweierlei:make_unique
ist sicher für die Erstellung von Provisorien, in der Erwägung, dass mit der expliziten Verwendung vonnew
Sie haben zu erinnern, die in der Regel über die nicht verwenden Unbenannte Provisorien.Den Zusatz von
make_unique
schließlich können wir sagen, die Menschen zu " nie "verwendennew
anstatt der bisherigen Regel ""never" benutzennew
außer wenn Sie eineunique_ptr
".Gibt es auch noch einen Dritten Grund:
make_unique
erfordert keine redundante Typ-Verwendung.unique_ptr<T>(new T())
->make_unique<T>()
Keiner der Gründe beinhalten die Verbesserung der Laufzeit-Effizienz mithilfe
make_shared
hat (durch Vermeidung einer zweiten Zuweisung, die auf Kosten der potentiell höhere maximale Speichernutzung).* Es wird erwartet, dass C++17 wird eine Regel ändern, dass bedeutet, dass dies nicht mehr unsicher. Siehe C++ - Komitee Papiere P0400R0 und P0145R3.
InformationsquelleAutor der Antwort bames53
std::make_unique
undstd::make_shared
gibt es zwei Gründe:std::unique_ptr
oderstd::shared_ptr
Konstruktoren. (Siehe den Abschnitt Hinweise hier.)Es ist nicht wirklich über die Laufzeit-Effizienz. Es ist die etwas über den Steuerblock und den
T
zugeordnet werden, alle auf einmal, aber ich glaube, das ist eher ein bonus und weniger die motivation für diese Funktionen existieren.InformationsquelleAutor der Antwort Timothy Shields
Einen Grund, warum Sie verwenden würde
std::unique_ptr(new A())
oderstd::shared_ptr(new A())
direkt stattstd::make_*()
wird nicht auf den Konstruktor der KlasseA
außerhalb des aktuellen Bereichs.InformationsquelleAutor der Antwort Volodymyr Lashko