আমি যখনই আমার কোডটিকে দৃ exception়ভাবে ব্যতিক্রমী হিসাবে নিরাপদ করে বিবেচনা করি তখনও আমি এটি না করা সমর্থন করি কারণ এটি সময় ব্যয়কারী হবে। এই তুলনামূলক সহজ স্নিপেট বিবেচনা করুন:
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
। এগুলি বাস্তবায়নে কেবল সময় সাপেক্ষ হবে না, তবে ব্যয়বহুল হবে কারণ এটি ব্যতিক্রমী অনিরাপদ সমাধানের চেয়ে অনেক বেশি অনুলিপি জড়িত।
শেষ পর্যন্ত, এটি আমার কাছে মনে হয় that সময়টি সমস্ত কিছু করে ব্যয় করা কেবল ন্যায়সঙ্গত হবে না যাতে একটি সাধারণ CreateEntity
কাজটি দৃ exception়ভাবে ব্যতিক্রম নিরাপদ। আমি সম্ভবত চাই যে গেমটি একটি ত্রুটি প্রদর্শন করবে এবং যেভাবেই হোক এই মুহুর্তে এটি বন্ধ হয়ে যাবে।
আপনি আপনার নিজের গেম প্রকল্পগুলিতে এটিকে কতদূর নিয়ে যান? কোনও ব্যতিক্রম যখন কেবল ক্র্যাশ করতে পারে এমন কোনও প্রোগ্রামের জন্য ব্যতিক্রম অনিরাপদ কোডটি লেখা কি সাধারণত গ্রহণযোগ্য?