हर बार जब मैं अपने कोड को दृढ़ता से सुरक्षित बनाने पर विचार करता हूं, तो मैं इसे करने का औचित्य नहीं रखता क्योंकि यह इतना समय लेने वाला होगा। इस अपेक्षाकृत सरल स्निपेट पर विचार करें:
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
कॉल पर एक स्कॉप्ड पॉइंटर का उपयोग कर सकता हूं । यदि कोई कॉल अपवाद को फेंकने के लिए स्मृति लीक को रोकती है।
हालाँकि, मान लें कि मैं एक मजबूत अपवाद गारंटी लागू करना चाहता हूं। कम से कम, मैं अपने कंटेनर के लिए एक साझा सूचक (मैं बूस्ट का उपयोग नहीं), एक nothrow लागू करने के लिए की आवश्यकता होगी Entity::Swap
atomically घटकों को जोड़ने के लिए, और atomically दोनों को जोड़ने के लिए मुहावरा किसी प्रकार का Vector
और Map
। न केवल इन्हें लागू करने में समय लगेगा, बल्कि वे महंगे होंगे क्योंकि इसमें अपवाद असुरक्षित समाधान की तुलना में बहुत अधिक नकल शामिल है।
अंतत: मुझे ऐसा लगता है कि उस समय को व्यतीत करते हुए वह सब कुछ उचित नहीं होगा, ताकि एक साधारण CreateEntity
कार्य दृढ़ता से अपवाद के रूप में सुरक्षित रहे। मैं शायद सिर्फ खेल को एक त्रुटि प्रदर्शित करना चाहता हूं और उस बिंदु पर बंद करना चाहता हूं।
आप इसे अपने गेम प्रोजेक्ट्स में कितनी दूर लेते हैं? क्या यह आम तौर पर एक प्रोग्राम के लिए अपवाद असुरक्षित कोड लिखने के लिए स्वीकार्य है जो अपवाद होने पर बस दुर्घटनाग्रस्त हो सकता है?