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

时间:2015-03-11 10:51:37

标签: c++ polymorphism

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

struct Shape{}
struct Stain : Shape {}

现在,为什么我不能做以下事情:

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

我希望这可以工作,因为StainShape的子类,所以我应该能够将Stain放入vector<Shape>?或者这在概念上是错误的,我想要做的确实不可能吗?

1 个答案:

答案 0 :(得分:10)

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

或者,如果您希望能够复制形状,请查看value_ptr概念。许多实现也允许COW(Copy-on-Write)。基本上对于几乎所有目的而言,它的工作方式就像一个值,例如它的副本会复制它所持有的值并分配它。

显而易见的变化是您不能再将您的矢量视为POD内存块