我不明白为什么这种继承不起作用。我有以下设置:
struct Shape{}
struct Stain : Shape {}
现在,为什么我不能做以下事情:
vector<Shape> shapes;
Stain stain();
shapes.push_back(stain);
我希望这可以工作,因为Stain
是Shape
的子类,所以我应该能够将Stain
放入vector<Shape>
?或者这在概念上是错误的,我想要做的确实不可能吗?
答案 0 :(得分:10)
对于C ++中的多态,您需要引用语义。实现这一目标的最简单方法是std::vector<std::unique_ptr<Shape>>
。
或者,如果您希望能够复制形状,请查看value_ptr
概念。许多实现也允许COW(Copy-on-Write)。基本上对于几乎所有目的而言,它的工作方式就像一个值,例如它的副本会复制它所持有的值并分配它。
显而易见的变化是您不能再将您的矢量视为POD内存块。