std::dynamic_pointer_cast 是 C++ 中用于在 std::shared_ptr 智能指针之间进行动态类型转换的函数模板

std::dynamic_pointer_cast 是 C++ 中用于在 std::shared_ptr 智能指针之间进行动态类型转换的函数模板。它位于 <memory> 头文件中,并与其他类型转换函数(如 static_pointer_castconst_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

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2024年4月22日
下一篇 2024年4月22日

相关推荐