std::shared_ptr<Derived>derivedPtr=std::dynamic_pointer_cast<Derived>(basePtr); if(derivedPtr){ // 转换成功,可以调用 Derived 类的成员函数 derivedPtr->derivedMethod(); } return0; } 这里,std::dynamic_pointer_cast将basePtr智能指针从Base类型转换为Derived类型,并返回一个新的std::shared_ptr<Deri...
模板函数的情况下返回空 dynamic_cast<Ty*>(sp.get()) 对象是否返回 null 指针;否则返回的资源由 spshared_ptr 类拥有的<Ty> 对象。 dynamic_cast<Ty*>(sp.get()) 绑定表达式是有效的。 示例 // std_tr1__memory__dynamic_pointer_cast.cpp // compile with: /EHsc #include <memory> #include <iost...
// std_tr1__memory__dynamic_pointer_cast.cpp // compile with: /EHsc #include <memory> #include <iostream> struct base { virtual ~base() { } int val; }; struct derived : public base { }; int main() { std::shared_ptr sp0(new derived); std::shared_ptr<derived> sp1 = std::dy...
dynamic_cast可以实现将子类指针动态转换成父类指针(相当于父类指针指向了子类对象),用dynamic_cast时,父类必须要有virtual声明的虚函数。 父类指针转换成子类指针(也就是子类指针指向了父类对象)是危险的,dynamic_cast失败会返回NULL,static_cast可以转换,但是有越界危险。 dynamic_cast如果转化的是引用,失败会抛出异...
std::shared_ptr<T>reinterpret_pointer_cast(std::shared_ptr<U>&&r)noexcept; (8)(C++20 起) 创建std::shared_ptr的新实例,其存储指针从r的存储指针用转型表达式获得。 若r为空,则新的shared_ptr亦然(但其存储指针不必为空)。否则,新的shared_ptr将与r的初始值共享所有权,但若dynamic_pointer_cast所进...
//p.h class P{ }; //s.h #include "p.h" class S : public P{ }; //main.cpp #include <iostream> #include "s.h" int main(){ //std::shared_ptr<P> x(new S); //std::shared_ptr<S> y = std::dynamic_pointer_cast<S>(x); P* x = new S; S* y = dynamic_cast<S*...
c) 可以把空指针转换成目标类型的空指针(null pointer)。 d) 把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volitale或者__unaligned属性。 2) dynamic_cast(带类型检查的转换--运行时检查) 用法:dynamic_cast <typeid> (expression) ...
2、「从设计模式的角度」,如果需要使用dynamic_cast说明设计有缺陷。这句话也没问题。3、但是google不...
_cast<A*>(this), this){}};structBase{virtual~Base(){}};structDerived:Base{virtualvoidname(){}};intmain(){D d;// 最终派生对象A&a=d;// 向上转换,可以用 dynamic_cast,但不是必须的[[maybe_unused]]D&new_d=dynamic_cast<D&>(a);// 向下转换[[maybe_unused]]B&new_b=dynamic_cast<...
完这一段,就可以使用神奇的std::shared_point了。...其中std::shared_ptr是智能指针,一下是最简单的用法 std::shared_ptr a = std::shared_ptr(new int()), b = std...}; 然后,对于智能指针的类型转换,需要用到std::const_pointer_cast,std::dynamic_pointer_cast,using std::static_pointer_cast...