2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类型)才能允许动态强制转换,否则编译报错)。 3、std::const_pointer_cast():功能与std::const_cast()类似 4、std::reinterpret_...
1、static_cast:向上转换,例如:基类向派生类转换 2、dynamic_cast:向下转换,例如:派生类向基类转换 二、static_poonter_cast和dynamic_pointer_cast区别同上,不过这两个只适用于智能指针
调用右值重载(2,4,6,8)后,r为空且r.get()==nullptr,但对于dynamic_pointer_cast(4),若dynamic_cast失败则不修改r。 (C++20 起) 参数 r-要转换的指针 注解 表达式std::shared_ptr<T>(static_cast<T*>(r.get()))、std::shared_ptr<T>(dynamic_cast<T*>(r.get()))及std::shared_ptr<T>(con...
由于 std::static_pointer_cast 不会在运行时进行检查,如果类型转换不合法,将会导致未定义行为。 仅在明确知道对象类型的情况下使用。如果对象类型不确定,或者可能存在多种类型,则应考虑使用 std::dynamic_pointer_cast 进行运行时类型检查。5. 提供一个简单的std::static_pointer_cast使用示例 以下是一个简单的...
从基类转型为派生类,应该使用dynamic_pointer_cast。因为从基类转型为派生类是不安全的,在运行时需要...
dynamic_pointer_cast Function enable_shared_from_this Class get_deleter Function operator!= <memory> operator< <memory> operator<< <memory> operator== <memory> shared_ptr Class static_pointer_cast Function swap Function weak_ptr Class _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY Macro <random...
定义: template <class T, class U> shared_ptr<T> static_pointer_cast (const shared_ptr<U>& sp) noexcept;解释: Returns a copy of sp of the proper type with its stored pointer c…
return (mk_tcp_session_ref)new std::shared_ptr<SessionForC>(std::dynamic_pointer_cast<SessionForC>(ref)); return (mk_tcp_session_ref)new std::shared_ptr<SessionForC>(std::static_pointer_cast<SessionForC>(ref)); }API_EXPORT void mk_tcp_session_ref_release(const mk_tcp_session_ref ...
std::shared_ptr<T> static_pointer_cast( std::shared_ptr<U>&& r ) noexcept; (2) (C++20 起) template< class T, class U >std::shared_ptr<T> dynamic_pointer_cast( const std::shared_ptr<U>& r ) noexcept; (3) (C++11 起) template< class T, class U >std::shared_ptr<T> ...
static_pointer_cast template<classT,classU>std::shared_ptr<T>static_pointer_cast(conststd::shared_ptr<U>&r)noexcept{autop=static_cast<typenamestd::shared_ptr<T>::element_type*>(r.get());returnstd::shared_ptr<T>{r, p};} dynamic_pointer_cast ...