0

我正在处理我的 c++ 作业,并尝试在我的程序中使用多态性。在我的程序中,我想在构造某些对象后立即将它们的指针存储在指针向量中:

entities.push_back(&Invader4());
entities.push_back(&Invader3());
entities.push_back(&Invader2());
entities.push_back(&Invader1());
entities.push_back(&Invader0());

class Invader 继承 class Entity,但是当我尝试访问实体中的元素时,会发生访问冲突。我必须先声明另一个 Invader 类型向量来存储这些对象吗?

4

1 回答 1

5

您正在获取临时地址,这是非法的(确切地说是未定义的行为)。只需动态分配内存:

entities.push_back(new Invader4());
entities.push_back(new Invader3());
entities.push_back(new Invader2());
entities.push_back(new Invader1());
entities.push_back(new Invader0());

完成后不要忘记删除向量中的内存。

另外,看看智能指针,这里可能更合适。

编辑:通过删除,我的意思是

for (int i = 0 ; i < entities.size() ; i++ )
    delete entities[i];

当你完成了向量。

于 2012-05-07T12:15:05.613 回答