【问题标题】:Casting smartpointers to base class将智能指针转换为基类
【发布时间】:2016-04-07 22:46:42
【问题描述】:

如果class B 派生自class A,我可以将dynamic_cast shared_ptr<B> 转换为shared_ptr<A>,并从shared_ptr<A> 转换为shared_ptr<B>

我只是问自己,因为使用dynamic cast,您可以在 Java 中执行类似 instanceof 的操作。我问自己这是否也适用于smart_ptr

【问题讨论】:

标签: c++11 inheritance casting smart-pointers


【解决方案1】:

对于从派生类转换为基类的特殊情况,可以使用赋值运算符为您进行必要的隐式转换。对于另一个方向,您可以使用 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 等都有等价物。

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多