我有一个查找方法,它接受一个字符串(标签)向量,搜索对象向量,如果参数标签与对象的标签匹配,则返回指向对象的指针。如果用户指定的结果不匹配,我只返回一个nullptr:
Entity* Scene::findEntity(std::vector<std::string> tags)
{
int matchIndex = findMatchIndex(tags);
if (tags.size() == 0 || matchIndex == -1) {
std::string msg = "No entity with tag(s): " + formatTags(tags) + " found.";
printf(msg.c_str());
return nullptr;
}
else {
return &_entities.at(matchIndex);
}
}
例如,假设用户尝试这样做:
TestScene::TestScene()
{
Entity player = Entity({ "player" }, { new Drawable(), new Transform(), new Collidable(), new PlayerScript() });
spawnEntity(player);
Entity* testPlayer = findEntity({ "Plsdfsdfdsfayer" });
testPlayer -> getTags();
}
这将导致未定义的行为,因为findEntity返回nullptr。
什么是没有找到对象时处理的好方法?当用户尝试与nullptr交互时,我是否应该以程序方式崩溃以防止未定义的行为?因为没有找到对象而退出感觉有点过分......