我的 entityManager 中有以下代码。
void GameObjectManager::updateAll(float frametime)
{
checkAlive();
// iterate through the entityManager, updating each entity and then adding it into the quadTree.
for (auto itr = _gameObjects.begin(); itr != _gameObjects.end(); itr++)
{
itr->second->Update(frametime);
tree->AddObject(itr->second);
}
// iterate once again through the entityManager but this time checking itself against the quadTree.
for (auto x = _gameObjects.begin(); x != _gameObjects.end(); x++)
{
std::vector<std::unique_ptr<Entity>> returnObjects = tree->GetObjectsAt(x->second->GetPosition().x, x->second->GetPosition().y );
for ( int n = 0; n < (int)returnObjects.size(); n++ )
{
std::unique_ptr<Entity>& collided = returnObjects[n];
if(object->getEntityName() != collided->getEntityName())
{
if(object->GetBoundingRect().intersects(collided->GetBoundingRect()))
{
object->Touch(collided);
}
}
}
}
tree->Clear();
}
在这个例子中,智能指针的正确用法是什么?当我将实体添加到四叉树时,我应该创建一个 shared_ptr,将其作为参考传递还是使用 std::move?我倾向于前两个中的一个,因为移动指针的所有权会将它从 std::map 中移动,这是我不想做的事情。
在传递信息时我应该遵循哪些简单的规则?什么时候应该使用引用,什么时候应该使用 shared_ptr?