代码之家  ›  专栏  ›  技术社区  ›  nburk

为什么这种C++多态性不起作用?

  •  2
  • nburk  · 技术社区  · 10 年前

    我不明白为什么这种继承不起作用。我有以下设置:

    struct Shape{}
    struct Stain : Shape {}
    

    现在,为什么我不能做到以下几点:

    vector<Shape> shapes;
    Stain stain();
    shapes.push_back(stain);
    

    我希望这项工作从 Stain 是的子类 Shape ,所以我应该可以 污点 进入 vector<Shape> ? 或者,这甚至在概念上是错误的,我试图做的事情确实是不可能的吗?

    1 回复  |  直到 10 年前
        1
  •  10
  •   Bartek Banachewicz    10 年前

    对于C++中的多态性,您需要引用语义。实现这一目标的最简单方法是 std::vector<std::unique_ptr<Shape>> .

    或者,如果您想复制形状,请查看 value_ptr 概念许多实现也允许COW(写时复制)。本质上,对于几乎所有的目的,它都像一个值一样工作,例如,它的副本会复制它持有的值并分配它。

    明显的变化是 你不能再把向量当作POD内存块 .