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 = ???
War es hilfreich?

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 ()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top