2015-05-09 18 views
5

Ich verwende boost::scoped_ptr in dem Code, den ich gerne ersetzen würde mit std::unique_ptr. Ich würde gerne wissen, ob es irgendwelche Nachteile bei der Umstellung auf std::unique_ptr gibt. Boost ist portabel über Plattformen und Compiler hinweg. Aber ich bin nicht sicher, ob C++ 11 von allen Compilern wie MSVC unterstützt wird. Ich weiß, dass GCC und Clang C++ 11 ziemlich gut unterstützen.Ändern boost :: scoped_ptr zu std :: unique_ptr

Ich habe bereits die SO Frage "intrusive_ptr in C++11" gelesen, deren kurze Antwort "Nein" ist. Also, wenn jemand Erfahrung in der Verwendung von beiden hatte, bitte teilen Sie Ihre Kommentare und Gedanken

+0

'std :: unique_ptr' ist vom Standard festgelegt, sodass jede kompatible Implementierung sie besser unterstützt. Aber ich bin mir nicht sicher, was genau Sie fragen. Die Frage, die Sie speziell angesprochen haben, wollte die Semantik von Boost. Ihre Frage scheint etwas anderes zu sein, aber ich bin mir nicht sicher, was es ist. – 5gon12eder

+0

vs2010 und forward haben eine Implementierung von 'std :: unique_ptr' – Mgetz

Antwort

9

Mgetz hat großzügig die Informationen zur Verfügung gestellt, die alle aktuellen VS-Implementierungen liefern unique_ptr.

Ich empfehle, dass Sie boost::scoped_ptr<T> durch const std::unique_ptr<T> ersetzen. Der Grund für die const ist, dass diese Modelle boost::scoped_ptr<T> am nähesten sind, die nicht "beweglich" sind. Ich glaube jedoch, boost::scoped_ptr<T> unterstützt Swapping. Wenn Sie das verwenden, wird sich der Compiler überall beschweren, wo Sie versuchen, eine const std::unique_ptr<T> auszutauschen, und Sie können diese Instanzen dann als nicht const markieren.

+0

Danke Howard. Diese Antwort ist gut geeignet – rkm

+1

Gibt es Leistungsprobleme oder eine bessere Leistung bei der Verwendung von std :: unique_ptr – rkm

+2

Ich glaube nicht, dass Sie irgendwelche Leistungsunterschiede sehen werden. –

Verwandte Themen