c++11 - 将智能指针转换为基类

标签 c++11 inheritance casting smart-pointers

如果class B源自class A ,我可以dynamic_cast一个shared_ptr<B>shared_ptr<A> ,以及来自 shared_ptr<A>shared_ptr<B>

我只是问自己,因为有了 dynamic cast你可以做类似 instanceof 的事情在 java 。我问自己这是否也适用于 smart_ptr .

最佳答案

对于从派生类转换为基类的特殊情况,可以使用赋值运算符来为您执行必要的隐式转换。对于另一个方向,您可以使用dynamic_pointer_cast。

#include <memory>

struct A { virtual ~A() = 0; };
struct B: A { };

void example()
{
    // derived to base
    std::shared_ptr<B> b;
    std::shared_ptr<A> a = b;

    // base to derived
    std::shared_ptr<A> a2;
    std::shared_ptr<B> b2 = std::dynamic_pointer_cast<B>(a2);
}

参见http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast有关强制转换操作的更多信息 - 所有常见操作都有对应的操作,例如 reinterpret_pointer_cast 等。

关于c++11 - 将智能指针转换为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488552/

相关文章:

JavaScript - File 是 File 的实例,但 `instanceof File` 为 false

c++ - 使用模板元编程的更好的 LOG() 宏

c++ - 调用 lambda 的结构/类成员时程序崩溃并显示 "bad_function_call"

java - 子类从父类实例化

Array.SetValue 在运行时的 C# 类型转换

java - 转换为递归有界类型

C++ 强制转换为 void

c++ - 如何使默认析构函数成为非内联的?

c++ - 调试打印解压缩可变参数模板函数参数

java - 使用继承的重载方法