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 = ???
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top