البرمجة

كيفية إرجاع تجريد من دون استخدام new

هل هناك طريقة لإرجاع تجريد من دالة دون استخدام new (من أجل أسباب أداء)؟

عادةً ما أقوم بـ new كائن Cat أو Dog في دالة pet_maker() وأعيد مؤشرًا إليه، ولكن new أبطأ بكثير من فعل كل شيء في الذاكرة الحية. هل هناك طريقة أنيقة يمكن لأحد التفكير فيها لإرجاع كتجريد دون الحاجة إلى فعل new في كل مرة يتم فيها استدعاء الدالة، أو هل هناك طريقة أخرى يمكنني بها إنشاء وإرجاع تجريد بسرعة؟

المزيد من المعلومات

تفضل، إذا كنت تبحث عن أداء أفضل بدون الحاجة إلى استخدام new في كل مرة يتم فيها استدعاء الدالة pet_maker()، فقد يكون استخدام إدارة الذاكرة بشكل يدوي هو الحل. يمكنك تخصيص مساحة ذاكرة محددة مسبقًا لكل من Cat و Dog وإعادة استخدام هذه المساحة في كل مرة تقوم فيها بإنشاء كائن. على سبيل المثال، يمكنك استخدام مصفوفة لتخزين الكائنات المُنشأة مسبقًا وتعيين مؤشرات إليها عند الحاجة، بدلاً من إنشاء كائن جديد في كل مرة.

على سبيل المثال، يمكنك استخدام مصفوفة لتخزين الحيوانات المنزلية المنشأة مسبقًا:

cpp
Pet pets[100]; // تخزين 100 حيوان منزلي مسبقًا Pet& pet_maker(bool is_cat) { static int next_cat_index = 0; static int next_dog_index = 0; if (is_cat) { if (next_cat_index < 100) { return pets[next_cat_index++]; } } else { if (next_dog_index < 100) { return pets[50 + next_dog_index++]; } } throw std::runtime_error("Out of memory"); }

تحتاج إلى تحديد حدٍ أقصى لعدد الحيوانات المنزلية التي يمكنك إنشاؤها مقدمًا وتتحمل تكاليف إدارة الذاكرة بشكل يدوي.

زر الذهاب إلى الأعلى