ทุกครั้งที่ฉันพิจารณาที่จะสร้างรหัสของฉันอย่างยิ่งยกเว้นที่ปลอดภัยฉันจะไม่ทำเพราะมันจะใช้เวลามาก ลองพิจารณาตัวอย่างข้อมูลที่ค่อนข้างง่าย:
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
โทร วิธีนี้จะป้องกันการรั่วไหลของหน่วยความจำหากมีการเรียกใด ๆ ที่จะทำให้เกิดข้อยกเว้น
อย่างไรก็ตามสมมติว่าฉันต้องการใช้การรับประกันข้อยกเว้นที่รัดกุม อย่างน้อยฉันจะต้องใช้ตัวชี้ที่ใช้ร่วมกันสำหรับบรรจุของฉัน (ฉันไม่ได้ใช้ Boost) nothrow Entity::Swap
สำหรับการเพิ่มส่วนประกอบอะตอมและการจัดเรียงบางส่วนของสำนวนสำหรับอะตอมเพิ่มทั้งและVector
Map
สิ่งเหล่านี้ไม่เพียงใช้เวลานานในการติดตั้ง แต่ยังมีราคาแพงเนื่องจากต้องใช้การคัดลอกมากกว่าโซลูชันที่ไม่ปลอดภัยยกเว้น
ในที่สุดฉันรู้สึกเหมือนว่าเวลาที่ใช้ในการทำทั้งหมดนั้นจะไม่ถูกต้องเพียงเพื่อให้CreateEntity
ฟังก์ชั่นที่เรียบง่ายนั้นปลอดภัยอย่างยิ่งยกเว้น ฉันอาจต้องการให้เกมแสดงข้อผิดพลาดและปิดที่จุดนั้นต่อไป
คุณใช้เวลานานแค่ไหนในโครงการเกมของคุณเอง? โดยทั่วไปเป็นที่ยอมรับได้หรือไม่ในการเขียนรหัสที่ไม่ปลอดภัยสำหรับโปรแกรมที่อาจผิดพลาดเมื่อมีข้อยกเว้น