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);
bei der Verwendung shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
c++
boost
shared-ptr
static-cast
Frank
quelle
quelle
Base *b = new Derived();
?Antworten:
Verwendung
boost::static_pointer_cast
:boost::shared_ptr<Base> b(new Derived()); boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
quelle
boost::static_pointer_cast<Derived>(b)
könnte auchBase
implizit verwendet werden.Es gibt drei Cast - Operatoren für intelligente Zeiger:
static_pointer_cast
,dynamic_pointer_cast
, undconst_pointer_cast
. Sie befinden sich entweder im Namespaceboost
(bereitgestellt von<boost/shared_ptr.hpp>
) oder im Namespacestd::tr1
(bereitgestellt von Boost oder von der TR1-Implementierung Ihres Compilers).quelle
Als Kommentar: Wenn Derived tatsächlich von Base abgeleitet ist, sollten Sie anstelle von statischen Casts einen dynamic_pointer_cast verwenden. Das System kann erkennen, wann / ob Ihre Besetzung nicht korrekt ist.
quelle
Es ist erwähnenswert, dass es einen Unterschied in der Anzahl der von Boost bereitgestellten Casting-Operatoren und der Implementierung von TR1 gibt.
Der TR1 definiert nicht den dritten Operator const_pointer_cast ()
quelle
const_pointer_cast
ist in C ++ 11 verfügbar.