std::static_pointer_cast 主要用于在明确知道对象类型的情况下,将智能指针从一种类型转换为目标类型。这种转换通常发生在继承层次中,如从基类智能指针向派生类智能指针的转换。使用 std::static_pointer_cast 可以确保在转换过程中不会丢失智能指针的内存管理功能。
不用std::static_pointer_cast // static_pointer_cast example #include <iostream> #include <memory> struct A { static const char* static_type; const char* dynamic_type; A() { dynamic_type = static_type; } }; struct B: A { static const char* static_type; B() { dynamic_type = sta...
调用右值重载(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...
一、shared_ptr认知及陷阱 shared_ptr的类型转换不能使用一般的static_cast,这种方式进行的转换会导致转换后的指针无法再被shared_ptr对象正确的管理。应该使用专门用于shared_ptr类型转换的 static_pointer_cast<T>() , const_pointer_cast<T>() 和dynamic_pointer_cast<T>()。 使用shared_ptr避免了手动使用delete...
否则,新的shared_ptr将与r,但如果dynamic_cast由dynamic_pointer_cast返回空指针。 让Y成typenamestd::shared_ptr<T>::element_type,然后产生的std::shared_ptr%27s存储的指针将通过按%29的顺序调用%28获得: 1%29static_cast<Y*>(r.get())... 2%29dynamic_cast<Y*>(r.get())%28如果结果为dynamic_cas...
否则,新的shared_ptr将与r,但如果dynamic_cast由dynamic_pointer_cast返回空指针。 让Y成typenamestd::shared_ptr<T>::element_type,然后产生的std::shared_ptr%27s存储的指针将通过按%29的顺序调用%28获得: 1%29static_cast<Y*>(r.get())... 2%29dynamic_cast<Y*>(r.get())%28如果结果为dynamic_cas...
`dynamic_cast` 在运行时检查类型的合法性,如果转换合法,则返回转换后的类型;如果不合法,且用于指针,则返回空指针,用于引用,则抛出 `std::bad_cast` 异常。 二者的主要区别在于它们作用的对象类型: 1. `std::dynamic_pointer_cast` 用于 `std::shared_ptr` 智能指针。 2. `dynamic_cast` 用于原生指针或...
至于static_cast这个没有什么好说的,语言层面的支持,static_cast<T&&>(x),将对象x转为其右值引用...
{// 分配一块区间,这个区间可以作为include和use类对象的unionstd::aligned_union<sizeof(use), include, use>::type storage;// 前面只是分配了内存,没有创建真正的union// 取storage的内存地址,转化为void*,然后使用placement new在对应的位置创建一个use类对象use * p =new(static_cast<void*>(std::addre...
《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」