static_cast mit Boost :: Shared_ptr?
-
05-07-2019 - |
Frage
Was ist das Äquivalent von a static_cast
mit boost::shared_ptr
?
Mit anderen Worten, wie muss ich Folgendes umschreiben?
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
beim Benutzen shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Lösung
Verwenden boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Andere Tipps
Es gibt drei Besetzungsbetreiber für intelligente Zeiger: static_pointer_cast
, dynamic_pointer_cast
, und const_pointer_cast
. Sie sind entweder im Namespace boost
(zur Verfügung gestellt von <boost/shared_ptr.hpp>
) oder Namespace std::tr1
(Bereitstellung entweder durch Boost oder durch die TR1 -Implementierung Ihres Compiler).
Als Kommentar: Wenn abgeleitet wird, leitet sich tatsächlich aus der Basis ab, dann sollten Sie eher einen dynamic_pointer_cast als statische Abschlüsse verwenden. Das System hat eine Chance zu erkennen, wann/ob Ihre Besetzung nicht korrekt ist.
Es ist zu erwähnen, dass der Unterschied in der Anzahl der Casting -Operatoren besteht, die durch Boost und Implementierungen von TR1 bereitgestellt werden.
Der TR1 definiert nicht den dritten Operator const_pointer_cast ()