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 new
aramalarda 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::Swap
için paylaşılan bir işaretçi (Boost kullanmıyorum), bileşenleri atomik olarak eklemek için bir not ve hem Vector
ve 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?