我是从这些问题中得出的:
- 为什么我们不能声明 std::vector? https://stackoverflow.com/questions/2160920/why-cant-we-declare-a-stdvectorabstractclass
- std 容器中的抽象类 https://stackoverflow.com/questions/24125669/abstract-classes-in-std-containers
- 如何存储由 std::unique_ptr 给出的抽象类的对象向量? https://stackoverflow.com/questions/12203878/how-to-store-a-vector-of-objects-of-an-abstract-class-which-are-given-by-stdun
他们都建议我应该使用指针或智能指针。
据我所知,数据是动态分配的std::vector
这意味着内部有指针std::vector
。那么为什么我不能直接使用抽象类呢?为什么我必须使用指针(我指定的指针)作为指针(内部)才能使用抽象类std::vector
。我知道一些功能,例如std::vector::resize
行不通的。然而,std::vector::reserve
and std::back_inserter
将解决问题。
据我所知,数据是在 std::vector 中动态分配的,这意味着内部有指针std::vector
这是绝对正确的。但是,该指针(实际上是非常常见的实现中的两个指针之一)指向一个由相同大小的类型元素组成的数组T
,而不是单个元素T
或其子类型。本质上,指针用于表示数组,而不是引用类或其子类。
这就是为什么您需要额外的间接级别 - 数组的元素T[]
不能存储子类T
没有对象切片.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)