为什么这个 C++ 多态性不起作用?
Why does this C++ polymorphism not work?
我不明白为什么这种继承不起作用。我有以下设置:
struct Shape{}
struct Stain : Shape {}
现在,为什么我不能执行以下操作:
vector<Shape> shapes;
Stain stain();
shapes.push_back(stain);
由于 Stain
是 Shape
的子类,所以我希望它能正常工作,所以我应该能够将 Stain
放入 vector<Shape>
?或者这甚至在概念上是错误的,而我正在尝试做的事情确实是不可能的?
对于 C++ 中的多态性,您需要引用语义。实现该目标的最简单方法是 std::vector<std::unique_ptr<Shape>>
.
或者,如果您希望能够复制您的形状,请查看 value_ptr
概念。许多实现还允许 COW(写时复制)。基本上对于几乎所有用途,它都像一个值一样工作,例如它的副本复制它所持有的值并分配它。
明显的变化是您不能再将向量视为 POD 内存块。
我不明白为什么这种继承不起作用。我有以下设置:
struct Shape{}
struct Stain : Shape {}
现在,为什么我不能执行以下操作:
vector<Shape> shapes;
Stain stain();
shapes.push_back(stain);
由于 Stain
是 Shape
的子类,所以我希望它能正常工作,所以我应该能够将 Stain
放入 vector<Shape>
?或者这甚至在概念上是错误的,而我正在尝试做的事情确实是不可能的?
对于 C++ 中的多态性,您需要引用语义。实现该目标的最简单方法是 std::vector<std::unique_ptr<Shape>>
.
或者,如果您希望能够复制您的形状,请查看 value_ptr
概念。许多实现还允许 COW(写时复制)。基本上对于几乎所有用途,它都像一个值一样工作,例如它的副本复制它所持有的值并分配它。
明显的变化是您不能再将向量视为 POD 内存块。