gpt4 book ai didi

c++ - 制作不同子类实例的 vector

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:47 24 4
gpt4 key购买 nike

尝试搜索,没有返回(我认为)。

是否可以制作一个抽象类的 vector ?

例如,我有父类(super class) Unit。

我有士兵、车辆和轰炸机子类。

但是我想要一个 vector 中的任何子类的实例,例如 vector UnitList 可以包含士兵和车辆的实例吗?

这可能吗?如果有帮助,我会使用 C++。

最佳答案

是的,但是您需要使用指针或智能指针(我会选择这个)。

struct X
{
virtual ~X() {} //<--- as pointed out in the comments
// a virtual destructor is required
// for correct deletion
virtual void foo() = 0;
};
struct Y : X
{
virtual void foo() { }
};

int main()
{
std::vector<X*> a;
a.push_back(new Y);
a[0]->foo();
for ( int i = 0 ; i < a.size() ; i++ )
delete a[i];
return 0;
}

不要忘记删除分配的内存。

为什么不能使用实际对象:

假设std::vector<X> .这是非法的,因为:

  1. 如果您想用一定数量的元素初始化 vector ,分配将会失败。 vector 将对象内部存储在连续内存中。预分配会失败,因为这意味着它需要创建对象,而抽象类不能这样做。

  2. 即使您可以,或者基类不是抽象的,也无济于事,因为您会遭受对象切片的困扰。

关于c++ - 制作不同子类实例的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com