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

Why does this C++ polymorphism not work?

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

struct Shape{}
struct Stain : Shape {}

现在,为什么我不能执行以下操作:

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

由于 StainShape 的子类,所以我希望它能正常工作,所以我应该能够将 Stain 放入 vector<Shape>?或者这甚至在概念上是错误的,而我正在尝试做的事情确实是不可能的?

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

或者,如果您希望能够复制您的形状,请查看 value_ptr 概念。许多实现还允许 COW(写时复制)。基本上对于几乎所有用途,它都像一个值一样工作,例如它的副本复制它所持有的值并分配它。

明显的变化是您不能再将向量视为 POD 内存块