我正在使用boost :: shared_ptr和boost :: dynamic_pointer_cast。我有一个基类,一个继承自该基类的接口,然后是一个继承自该基类的类。 所以A - > B - > C.我创建了一个C类型的对象,并将其存储为A类型的shared_ptr。然后我尝试使用dynamic_pointer_cast来键入B,但boost :: dynamic_pointer_cast返回NULL。
ServiceDiscovery::ref sd=serviceDiscovery.lock();if(!sd)return; DiscoItem::ref c=boost::dynamic_pointer_cast<DiscoItem> (cursorPos);if(c) { sd->discoverJid(c->jid, c->node); sd->go();return; } DiscoCommand::ref dc=boost::dynamic_pointer_cast<DiscoCommand> (cursorPos);if(dc) {...
将shared_ptr赋值为nullptr相当于调用reset()。 shared_ptr也提供了转换运算符dynamic_pointer_cast<>、static_pointer_cast<>、const_pointer_cast<>。 使用示例1: View Code 使用示例2: View Code ②、注意事项 shared_ptr不支持直接使用原始指针进行"="操作: View Code 对shared_ptr进行 = 操作后原shared_ptr...
但是对于shared_ptr不能使用诸如 static_cast<T*> (p.get()) 1. 的形式。 而要使用: static_pointer_cast<T> () const_pointer_cast<T> () dynamic_pointer_cast<T> () 1. 2. 3. 分别对应标准的转型操作符: static_cast<T> () const_cast<T> () dynamic_cast<T> () 1. 2. 3. 但以上...
38、关成员函数:需要使用:boost:static_pointer_castboost:dynamic_pointer_castboost:const_pointer_castboost:reinterpret_pointer_cast这四个转型模板函数。36第九节:shared_ptr一些使用技巧:8、使用shared_ptr 持有任意对象的所有权 void Test_Create_Void_Ptr_From_String() boost:shared_ptr ptr(new std:string...
(void) dynamic_cast< T* >( static_cast< U* >( 0 ) ); typedef typename shared_ptr<T>::element_type E; E * p = dynamic_cast< E* >( r.get() ); return p? shared_ptr<T>( r, p ): shared_ptr<T>(); } template<class T, class U> shared_ptr<T> reinterpret_pointer_cast...
const_cast const_pointer_cast static_cast static_pointer_cast dynamic_cast dynamic_pointer_cast 最后一个小问题:以前,boost中的shared_ptr的cast函数的名字是:shared_xxxx_cast, 后来,为了IDE自动提供帮助,改成了xxxx_pointer_cast。由此可见,设计库还是要用户至上。
E * p = const_cast< E* >( r.get() ); return shared_ptr<T>( r, p ); } template<class T, class U> shared_ptr<T> dynamic_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT { (void) dynamic_cast< T* >( static_cast< U* >( 0 ) ); ...
m_testCases[tc] = boost::dynamic_pointer_cast<DoseTest::Items::TestCase> (Safir::Dob::Typesystem::Serialization::ToObject(Safir::Dob::Typesystem::Utilities::ToWstring(xml.str())); }catch(conststd::exception & exc) {std::wcerr <<"Failed to read file '"<< path.string().c_str()...
例如,下面的代码使用dynamic_pointer_cast把一个shared_ptr<std::exception>向下转型为一个shared_ptr<bad_exception>,然后又用static_pointer_cast将其重新转型为shared_ptr<std::exception>: 4.shared_ptr<void> shared_ptr<void>能够存储void*型指针,而void*型指针可以指向任意类型,因此shared_ptr<void>就像是一...