gpt4 book ai didi

c++ - 在 C++ 中初始化抽象基类的子类数组

转载 作者:行者123 更新时间:2023-11-30 00:52:00 25 4
gpt4 key购买 nike

我在 C++ 中有一个抽象基类,需要创建一个数组来存储作为它的子类的对象。我使用指向子类的指针,因为数组的每个成员都需要具有相同的大小。目前我正在这样声明和初始化我的数组:

BaseClass *array[];
...
array =
{
&SubClass1(...),
&SubClass2(...),
...
&SubClass3(...)
};

当我尝试编译时,这给了我以下信息:

warning: taking address of temporary
error: too many initializers for ‘BaseClass* [0]’

这样做的正确方法是什么?

最佳答案

你不能用临时对象来做​​——你应该静态地、动态地分配你的对象,或者把它们放在自动存储中。

要静态分配对象,请执行以下操作:

static SubClass1 s1(..);
static SubClass2 s2(..);
static SubClass3 s3(..);
BaseClass *array [] = { &s1, &s2, &s3 };

如果您动态分配它们,请考虑使用 vector<shared_ptr<T>>而不是自动释放的“原始”指针:

vector<shared_ptr<BaseClass>> data = {
make_shared<SubClass1>(...)
, make_shared<SubClass2>(...)
, make_shared<SubClass3>(...)
};

关于c++ - 在 C++ 中初始化抽象基类的子类数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20127889/

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