Was ist das Äquivalent eines static_cast
mit boost::shared_ptr
?
Mit anderen Worten, wie muss ich das Folgende 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 = ???
Verwenden boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Es gibt drei Besetzungsoperatoren für intelligente Zeiger: static_pointer_cast
, dynamic_pointer_cast
, und const_pointer_cast
. Sie befinden sich entweder im Namespace boost
(bereitgestellt von <boost/shared_ptr.hpp>
) oder Namespace std::tr1
(entweder von Boost oder von der TR1-Implementierung Ihres Compilers bereitgestellt).
Als Kommentar: Wenn Derived tatsächlich von Base abgeleitet ist, sollten Sie einen dynamic_pointer_cast anstelle von statischen Casts verwenden. Das System hat die Möglichkeit zu erkennen, wann/ob Ihre Besetzung nicht korrekt ist.
Es ist erwähnenswert, dass es einen Unterschied in der Anzahl der von Boost bereitgestellten Casting-Operatoren und den Implementierungen von TR1 gibt.
Der TR1 definiert nicht den dritten Operator const_pointer_cast ()