std::unique_ptr
ist in der Tat der neue empfohlene Weg. Mit C++ 0x werden Containers bewußtseinsbewußt, was bedeutet, daß sie mit Typen umgehen können, die korrekt beweglich sind (d. H. std::vector<std::auto_ptr<x> >
funktioniert nicht, aber std::vector<std::unique_ptr<x>>
wird es tun).
Für boost
unterstützen die boost::interprocess
Container bereits bewegliche Typen, wobei boost::interprocess::unique_ptr
einer davon ist. Sie ähneln beweglichen Typen in pre C++ 0x, indem sie einige der "normalen" Boost-Template-Assistenten verwenden und r-Wert-Referenzen verwenden, wo sie unterstützt werden.
Ich wusste nicht über die auto_ptr
dedizierte Abwertung, obwohl, aber ich habe nicht die neue Standardentwicklung eng verfolgt.
(bearbeiten) Die Umsetzung der boost::interprocess::unique_ptr
ist in der Tat nicht um einen „öffentlichen“ smart-Zeiger wie boost::shared_ptr
oder boost::scoped_ptr
, aber es ist (siehe boost.interprocess's site) nicht nur für Shared-Memory, sondern auch für Allgemein- verwendet werden kann, Zweck.
Allerdings bin ich mir ziemlich sicher, dass, wenn GCC die auto_ptr
Vorlage veraltet, sie bereits ihre eigene unique_ptr
Implementierung bereitstellen (nicht viel zu verwerfen, wenn Sie noch keine brauchbare Alternative haben).
Wenn Sie jedoch an einer C++ 0x-Plattform arbeiten, verwenden Sie unique_ptr
, die in der lib des Compilers verfügbar ist. Wenn nicht, bleiben Sie bei auto_ptr
.
'Wird veraltet sein' ist zu stark. Der aktuelle Entwurf schlägt diese Änderung vor. Wartet darauf, dass es ein Standard wird. –
ja. Aber es wäre sehr überraschend, wenn auto_ptr nicht veraltet wäre. es dient dem gleichen Zweck wie unique_ptr, nur auf eine schreckliche Art und Weise :) (Missbrauch der cctor) –
@litb: Obwohl ich AutoPtr zu respektieren bin, stimme ich Ihnen zu, es kann schwierig sein, richtig zu verwenden. Aber C++ ist viel zu komplex, um einfach davon auszugehen, dass unique_ptr ein akzeptabler Ersatz sein wird, ohne viel zu studieren und zu testen, zumindest sind die Schwächen von auto_ptr gut verstanden. –