首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用dynamic_pointer_cast时出现分段故障

使用dynamic_pointer_cast时出现分段故障
EN

Stack Overflow用户
提问于 2018-05-28 09:20:09
回答 1查看 549关注 0票数 2

下面的代码片段是我在使用std::dynamic_pointer_cast时遇到的一个问题

代码语言:javascript
复制
#include <iostream>
#include <memory>

class foo {
private:
    int x;
public:
    foo() : x(0) {}
    foo(int xx) : x(xx) {}
    virtual ~foo() = default;
    int get_x() const { return x; }
};

class bar : public foo {
private:
    double y;
public:
    bar(double yy) : foo(), y(yy) {}
    double get_y() const { return y; }
};

int main(void) {
    bar b(0.5);
    std::shared_ptr<foo> fptr = std::make_shared<foo>(b);
    std::cout << (std::dynamic_pointer_cast<bar>(fptr))->get_x();
    return 0;
}

这个程序在输出流线路(std::cout << ...)处分段,可能是因为dynamic_pointer_cast导致了nullptr,但我不确定为什么会这样?

感谢任何帮助,再加上这里是一个Coliru link to the snippet too

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 09:24:53

这是预期的行为。fptr管理着一个实际指向foo的指针。当您将其向下强制转换为通过dynamic_cast指向bar的指针时,转换将失败,您将得到一个空指针。

如果fptr指向一个bar,那么它就会工作。例如:

代码语言:javascript
复制
std::shared_ptr<foo> fptr = std::make_shared<bar>(b);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50558009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档