template< class T, class U > std::shared_ptr<T> static_pointer_cast( const std::shared_ptr<U>& r ); (1) (since C++11) template< class T, class U > std::shared_ptr<T> dynamic_pointer_cast( const std::shared_ptr<U>& r ); (2) (since C++11) template< class T, class U...
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>(const_cast<T*>(r.get())...
std::shared_ptr<T> static_pointer_cast( const std::shared_ptr<U>& r ) noexcept; (1) (C++11 起) template< class T, class U >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> ...
r - The pointer to convert 例外 noexcept规格: noexcept 注记 表达std::shared_ptr<T>(static_cast<T*>(r.get())),,,std::shared_ptr<T>(dynamic_cast<T*>(r.get()))和std::shared_ptr<T>(const_cast<T*>(r.get()))可能具有相同的效果,但它们都可能导致未定义的行为,尝试删除同一对象两次...
const char* B::static_type = "class B"; int main () { std::shared_ptr<A> foo; std::shared_ptr<B> bar; foo = std::make_shared<A>(); // cast of potentially incomplete object, but ok as a static cast: bar = std::static_pointer_cast<B>(foo); std::cout << "foo's stat...
shared_ptr的类型转换不能使用一般的static_cast,这种方式进行的转换会导致转换后的指针无法再被shared_ptr对象正确的管理。应该使用专门用于shared_ptr类型转换的 static_pointer_cast<T>() , const_pointer_cast<T>() 和dynamic_pointer_cast<T>()。
1. 解释std::static_pointer_cast的基本概念 std::static_pointer_cast 是C++11 引入的一个模板函数,用于智能指针(如 std::shared_ptr 或std::weak_ptr)之间的类型转换。这种转换是编译时的强制转换,不会在运行时进行检查,类似于 static_cast,但专门用于智能指针,确保转换后的指针仍然保留智能指针的内存管理功能...
std::const_mem_fun1_t std::const_mem_fun_ref_t std::const_mem_fun_t std::const_pointer_cast std::cref std::ctime std::current_exception std::decay std::declare_no_pointers std::declare_reachable std::declval std::default_delete std::default_searcher std::destroy std::destroy_at st...
M_functor->_M_function_pointer的函数;如果需要包装一个函数对象,则依照函数对象是否为 const 设置...
explicit unique_ptr(pointer p); (2) unique_ptr(pointer p, (3) typename conditional<is_reference<Deleter>::value, Deleter, const Deleter&>::type d); unique_ptr(pointer p, (4) typename remove_reference<Deleter>::type&& d); unique_ptr(unique_ptr&& u); (5) ...