std::dynamic_pointer_cast
是 C++ 中用于在 std::shared_ptr
智能指针之间进行动态类型转换的函数模板。它位于 <memory>
头文件中,并与其他类型转换函数(如 static_pointer_cast
和 const_pointer_cast
)一起提供了方便且安全的智能指针类型转换操作。
std::dynamic_pointer_cast
可以将一个 std::shared_ptr
智能指针从一个派生类类型向另一个派生类类型进行转换,前提是这两个类之间存在继承关系。如果转换成功,将返回一个新的 std::shared_ptr
,指向目标类型的对象;如果转换失败,则返回一个空的 std::shared_ptr
。
以下是一个示例,展示了如何使用 std::dynamic_pointer_cast
进行动态类型转换:
#include <iostream>
#include <memory>
class Base {
public:
virtual void foo() {
std::cout << "Base::foo()" << std::endl;
}
};
class Derived : public Base {
public:
void foo() override {
std::cout << "Derived::foo()" << std::endl;
}
};
int main() {
std::shared_ptr<Base> basePtr = std::make_shared<Derived>();
std::shared_ptr<Derived> derivedPtr = std::dynamic_pointer_cast<Derived>(basePtr);
if (derivedPtr != nullptr) {
derivedPtr->foo(); // 调用 Derived 类的 foo() 方法
} else {
std::cout << "Dynamic cast failed." << std::endl;
}
return 0;
}
在这个示例中,我们首先创建了一个指向 Derived
类对象的 std::shared_ptr<Base>
,然后使用 std::dynamic_pointer_cast
将其转换为 std::shared_ptr<Derived>
。如果转换成功,则可以通过 derivedPtr
调用 Derived
类的成员函数。
请注意,std::dynamic_pointer_cast
只能用于智能指针之间的动态类型转换,并且在进行转换时会自动检查转换的安全性。如果尝试将指向不相关类的指针进行转换,或者源指针为空指针,则返回的结果将是空指针。
版权声明:本文为博主作者:Respect@原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/m0_46376834/article/details/136887647