Kodumu kesinlikle istisna olarak güvenli hale getirmeyi her düşündüğümde, bunu yapmamayı haklı çıkarıyorum çünkü çok zaman alıcı olurdu. Bu nispeten basit snippet'i düşünün:
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;
Temel bir istisna garantisi uygulamak için newaramalarda kapsamlı bir işaretçi kullanabilirim. Bu, aramalardan herhangi biri bir istisna atacaksa bellek sızıntılarını önleyecektir.
Ancak, güçlü bir istisna garantisi uygulamak istediğimi varsayalım. En azından, kaplarım Entity::Swapiçin paylaşılan bir işaretçi (Boost kullanmıyorum), bileşenleri atomik olarak eklemek için bir not ve hem Vectorve hem de atomik olarak eklemek için bir tür deyim uygulamak gerekir Map. Bunların uygulanması sadece zaman alıcı olmakla kalmaz, aynı zamanda güvensiz çözümden çok daha fazla kopyalama gerektirdiğinden pahalı olurlar.
Nihayetinde, tüm bunları yapmak için harcanan zamanın haklı olmayacağı gibi hissediyorum CreateEntity fonksiyonun istisnai olarak güvenli . Muhtemelen oyunun bir hata göstermesini ve yine de o noktada kapanmasını istiyorum.
Kendi oyun projelerinizde bunu ne kadar ileri taşıyorsunuz? Sadece bir istisna olduğunda çökebilecek bir program için istisna güvensiz kod yazmak genellikle kabul edilebilir mi?