【发布时间】: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); - 当我需要特定对象不包含的数据时,我希望得到一个异常。
但是,转换工作正常,然后在访问数据时出现分段错误。我是否使用了错误的演员表?
这是不好的做法吗?关于如何更好地实施的任何提示?
【问题讨论】:
-
你的真实代码中没有虚函数吗?