我对列表感到有些困惑。见下文:
int ParticleSystemManager::CreateParticleSystem()
{
ParticleSystem* system = new ParticleSystem(Vector3(), Vector3(), 10, 1);
system->SetLifeTime(200);
list<ParticleSystem>::iterator it = particleSystems.begin();
particleSystems.insert(it, *system);
selectedParticleSystem = system;
return 0;
}
我想要做的是获取我刚刚创建的particleSystem将它添加到粒子系统列表中,但是我也想要将添加的粒子系统存储在指针中。我注意到,当迭代列表时,内存位置与selectedParticleSystem指针存储的位置不同。我怎样才能使它们一样?更新如下:
void ParticleSystemManager::Update(float elapsedTime)
{
for (std::list<ParticleSystem>::iterator iterator = particleSystems.begin(), end = particleSystems.end(); iterator != end; ++iterator)
{
iterator->Update(elapsedTime);
}
}
答案 0 :(得分:1)
我注意到,当迭代列表时,内存位置与selectedParticleSystem指针存储的位置不同。
这是因为std::list::insert
创建了对象的副本。
您的选择是:
改为创建list
指针(尽管有几个原因,您可能希望使用智能指针)。
获取指向列表中对象的指针,然后存储该指针。类似的东西:
selectedParticleSystem = &(*particleSystems.insert(it, *system));
如果你这样做,你当然需要delete
原始对象,否则你会有内存泄漏。
答案 1 :(得分:1)
添加Oli的答案:如果您使用C ++ 11,则可以使用emplace 代替在列表中创建新的ParticleSystem:
particleSystems.emplace(particleSystems.begin(),Vector3(), Vector3(), 10, 1);
particleSystems.begin()->SetLifeTime(200);
selectedParticleSystem=particleSystems.begin();