我正在研究我的c ++任务,并尝试在我的程序中使用多态。在我的程序中,我想在构造它们之后将一些对象的指针存储在指针向量中:
entities.push_back(&Invader4());
entities.push_back(&Invader3());
entities.push_back(&Invader2());
entities.push_back(&Invader1());
entities.push_back(&Invader0());
类Invader继承类Entity,但是当我尝试访问实体中的元素时,会发生访问冲突。我是否必须先声明另一个Invader类型向量来存储这些对象?
答案 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];
当你完成了矢量。