【问题标题】:C++11 std::dynamic_pointer cast behaviourC++11 std::dynamic_pointer 强制转换行为
【发布时间】:2018-09-15 08:24:35
【问题描述】:

我有一些相互派生并继承其父属性的类,都在一个通用接口下,简化:

class I 
{
};

class A : public I
{
    data getDataA() const;
    data A_;

};

class B : public A
{
    data getDataB() const;
    data B_;
};

现在我希望实现以下目标。

  • 我可以创建接口类的指针并移动对象/指针。 auto p = std::shared_ptr<I>(new B(data));
  • 当我需要访问数据时,我将它们转换为所需的数据类型,即使我不需要所有数据(例如我只需要 A_),它也可以工作。 auto a = std::dynamic_pointer_cast<A>(p);
  • 当我需要特定对象不包含的数据时,我希望得到一个异常。

但是,转换工作正常,然后在访问数据时出现分段错误。我是否使用了错误的演员表?

这是不好的做法吗?关于如何更好地实施的任何提示?

【问题讨论】:

  • 你的真实代码中没有虚函数吗?

标签: c++11 pointers casting


【解决方案1】:

当我需要特定对象不包含的数据时,我会 期望得到一个异常。

dynamic_pointer_castdoes not throw on failure,而是返回一个空的shared_pointer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2014-03-17
    • 2017-01-20
    相关资源
    最近更新 更多