static_cast con boost :: shared_ptr?
-
05-07-2019 - |
Domanda
Qual è l'equivalente di un static_cast
con boost::shared_ptr
?
In altre parole, come devo riscrivere quanto segue
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
quando si utilizza shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Soluzione
Usa boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Altri suggerimenti
Esistono tre operatori di cast per i puntatori intelligenti: static_pointer_cast
, dynamic_pointer_cast
e const_pointer_cast
. Si trovano nello spazio dei nomi boost
(fornito da <boost/shared_ptr.hpp>
) o nello spazio dei nomi std::tr1
(fornito da Boost o dall'implementazione TR1 del compilatore).
Come commento: se Derived in effetti deriva da Base, allora dovresti usare un dynamic_pointer_cast invece di cast statici. Il sistema avrà la possibilità di rilevare quando / se il cast non è corretto.
Vale la pena ricordare che esiste una differenza nel numero di operatori di casting forniti da Boost e nelle implementazioni di TR1.
Il TR1 non definisce il terzo operatore const_pointer_cast ()