7
您发现C ++代码中的异常安全性有多重要?
每当我考虑使我的代码强烈地异常安全时,我就不这样做,因为这样做会非常耗时。考虑以下相对简单的代码段: Level::Entity* entity = new Level::Entity(); entity->id = GetNextId(); entity->AddComponent(new Component::Position(x, y)); entity->AddComponent(new Component::Movement()); entity->AddComponent(new Component::Render()); allEntities.push_back(entity); // std::vector entityById[entity->id] = entity; // std::map return entity; 为了实现基本的异常保证,我可以在new调用中使用作用域指针。如果任何调用引发异常,这将防止内存泄漏。 但是,假设我要实现一个强大的异常保证。至少,我需要实现我的容器共享光标(我不使用升压),一个无抛出Entity::Swap的原子添加组件和某种成语的原子添加到两个Vector及Map。实施这些不仅耗时,而且由于与异常不安全解决方案相比涉及更多的复制,因此它们也很昂贵。 最终,在我看来,花时间做所有这些事情是不合理的,因此一个简单的CreateEntity函数是绝对例外安全的。我可能只想让游戏显示一个错误并在该点关闭。 您在自己的游戏项目中走了多远?为可能会在出现异常时崩溃的程序编写异常不安全代码,通常是否可以接受?