为什么我不能在std :: vector中使用抽象类?

Hum*_*awi 4 c++ polymorphism abstract-class vector c++11

我是从这些问题中得出的:

他们都建议我应该使用指针或智能指针.

据我所知,数据是动态分配的,std::vector这意味着内部有指针std::vector.那么为什么我不能直接使用抽象类呢?为什么我必须使用指针(我指定的那个)指针(内部)才能使用抽象类std::vector.我知道有些功能std::vector::resize不起作用.然而,std::vector::reservestd::back_inserter将解决这个问题.

das*_*ght 6

据我所知,数据是在std :: vector中动态分配的,这意味着在内部有指针 std::vector

那是绝对正确的.但是,指针(实际上,非常常见的实现中的两个指针之一)指向一个大小相同的元素数组T,而不是单个元素T或其子类型.本质上,指针用于表示数组,而不是指代类或其子类.

这就是为什么你需要一个额外的间接级别 - 数组的元素T[]不能存储T没有对象切片的子类.


πάν*_*ῥεῖ 5

数据是动态分配的,std::vector这意味着内部有指针std::vector

不,这是一种误解.std::vector在内部分配实例数组,您无法创建抽象类的实例.