我们可以使用智能指针类的构造函数来创建一个智能指针,该指针将管理之前创建的原始指针。 std::shared_ptr<int> shared_ptr(raw_ptr); 第四步:使用dynamic_pointer_cast进行类型转换 现在我们将使用dynamic_pointer_cast函数来将shared_ptr转换为不同类型的智能指针。调用dynamic_pointer_cast中的目标类型以及源类型作...
dynamic_pointer_cast 是 C++ 标准库中的一个函数模板,用于在智能指针之间进行动态类型转换。它接受一个 shared_ptr 或 weak_ptr,并将其转换为另一个类型的 shared_ptr。这种转换只能在具有继承关系的类之间进行。 dynamic_pointer_cast 的语法如下: 代码语言:txt 复制 template<class T, class U> shared_ptr<...
1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
使用dynamic_pointer_cast的前提是需要有一个基类和派生类的继承关系,并且基类指针或智能指针所指向的对象实际上是派生类对象。 下面是dynamic_pointer_cast的语法: dynamic_pointer_cast<DerivedType>(base_pointer); 其中,DerivedType是派生类的类型,base_pointer是基类的智能指针。 使用dynamic_pointer_cast需要注意以下...
dynamic_cast: 将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。 主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数。
dynamic_pointer_cast用于转换std::shared_ptr类型,例如从基类上的指针转换为派生类上的指针:...
当指针是智能指针时候,向下转换,用dynamic_Cast 则编译不能通过,此时需要使用dynamic_pointer_cast。向下转换(含智能指针):struct Father { //基类Father }; struct Son:Father { //基类Father的派生类B }; std::shared_ptr<Father> father; std::shared_ptr<Son> son = std::dynamic_pointer_cast<Son>(...
下面是一个使用 dynamic_pointer_cast 的示例代码: int* int_ptr = new int(10); char* char_ptr = dynamic_pointer_cast<char*>(int_ptr); 在这个示例中,我们首先创建了一个指向整数的指针 int_ptr,然后使用 dynamic_pointer_cast 将它转换为指向字符的指针 char_ptr。 注意事项 虽然动态指针转换是一种强...
使用dynamic_pointer_cast需要经过以下几个步骤: 1. 先创建一个基本智能指针,它可以指向基类或派生类。 2. 调用dynamic_pointer_cast函数,将基本智能指针转换为指向派生类的智能指针。此时,需要指定转换后的类型。 3. 对返回的智能指针进行检查,判断是否转换成功。如果转换失败,会返回一个空指针。 以下代码展示了如何...
template <class Ty, class Other> shared_ptr<Ty> dynamic_pointer_cast(const shared_ptr<Other>& sp); 参数 Ty 返回的共享指针控制的类型。 Other 参数控制的类型共享指针。 sp 共享指针参数。 备注 模板函数的情况下返回空 dynamic_cast<Ty*>(sp.get()) 对象是否返回 null 指针;否则返回的资源由 spshar...