std :: vector没有保留数据?

时间:2011-02-09 21:10:42

标签: c++ vector std

我有这个代码:


void BaseOBJ::update(BaseOBJ* surround[3][3])
{
    forces[0]->Apply(); //in place of for loop
    cout << forces[0]->GetStrength() << endl; //forces is an std::vector of Force*
}

void BaseOBJ::AddForce(float str, int newdir, int lifet, float lifelength) {

Force newforce;
newforce.Init(draw, str, newdir, lifet, lifelength);
forces.insert(forces.end(), &newforce);
cout << forces[0]->GetStrength();

}

现在,当我调用AddForce并使用强度为1的无限力量时,它会使用cout的1.但是当调用更新时,它只输出0,就好像力不再存在一样。

2 个答案:

答案 0 :(得分:4)

您正在向量中存储一个强制指针,但力是本地函数。

您必须使用new在堆上创建。

Force* f = new Force;
forces.push_back(f);

答案 1 :(得分:3)

你需要用new创建你的力量:

Force *newforce = new Force;
newforce->Init(draw, str, newdir, lifet, lifelength);
forces.insert(forces.end(), newforce); // or: forces.push_back(force);

您的代码会发生什么事情,您的对象仍然在堆栈中,在您离开函数并执行其他操作后,它会被覆盖。

为什么是指针向量?可能你想要一个力矢量,而不是力*。你扔掉之前你还必须删除你矢量的所有元素!