将对象的指针直接存储在指针向量中?

时间:2012-05-07 12:13:45

标签: c++

我正在研究我的c ++任务,并尝试在我的程序中使用多态。在我的程序中,我想在构造它们之后将一些对象的指针存储在指针向量中:

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

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

1 个答案:

答案 0 :(得分: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];

当你完成了矢量。