English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المقال، ستتعلم كيفية إدارة الذاكرة بشكل فعال في C++ باستخدام عمليات new و delete.
المصفوفةيمكن استخدامها لتخزين بيانات متعددة من نفس النوع، ولكن هناك عيوب خطيرة في استخدام المصفوفات.
يجب تخصيص الذاكرة عند إعلان المصفوفة، ولكن في معظم الحالات يمكن تحديد الذاكرة المطلوبة بالضبط فقط أثناء التشغيل.
في هذه الحالة، أفضل ممارسة هي إعلان مصفوفة تحتوي على أكبر قدر ممكن من الذاكرة المطلوبة (إعلان مصفوفة تحتوي على حجم أكبر ممكن).
من النقاط السلبية أن الذاكرة غير المستخدمة معطلة ولا يمكن استخدامها من قبل أي برنامج آخر.
لمنع إهدار الذاكرة، يمكنك استخدام عمليات new و delete في C++ لتخصيص الذاكرة الديناميكية اللازمة أثناء التشغيل.
برنامج C++ يحفظ درجات n من الطلاب ويظهرها، حيث n هو عدد الطلاب المطلوب من المستخدم إدخال عدد الطلاب.
#include <iostream> #include <cstring> using namespace std; int main() { int num; cout << "ادخل عدد الطلاب: "; cin >> num; float* ptr; // بيانات float تم تخصيص الذاكرة لها ptr = new float[num]; cout << "ادخل درجات الطالب." << endl; for (int i = 0; i < num; ++i) { cout << "طالب" << i + 1 << " : "; cin >> *(ptr + i); } cout << "\nعرض درجات الطالب." << endl; for (int i = 0; i < num; ++i) { cout << "طالب" << i + 1 << " : " << *(ptr + i) << endl; } // ptr ذاكرة تم إطلاقها delete [] ptr; return 0; }
نتيجة الخروج
ادخل عدد الطلاب: 5 ادخل درجات الطالب. طالب1: 295 طالب2: 485 طالب3: 650 طالب4: 700 طالب5: 540 عرض درجات الطالب. طالب1 :295 طالب2 :485 طالب3 :650 طالب4 :700 طالب5 :540
في هذا البرنامج، يتم إعلان الذاكرة بشكل ديناميكي فقط للذاكرة المطلوبة لتخزين num عدد من القيم الفلانية (المقدمة من المستخدم).
ptr = new float[num];
عبرة في البرنامج أعلاه تعود نقطة إلى جزء من الذاكرةالنقطة، ويكون هذا الذاكرة كافية لتكون مساحة لتخزين num بيانات浮punk.
بعد تخصيص الذاكرة باستخدام عملاق new، يجب إرجاعها إلى نظام التشغيل.
إذا استخدمت برنامج يحتاج إلى الكثير من الذاكرة باستخدام new، قد ينهار النظام لأن نظام التشغيل لا يملك ذاكرة متاحة، مما يؤدي إلى استنفاد الذاكرة.
عبارات أعلاه ستعيد إرجاع الذاكرة إلى نظام التشغيل.
delete [] ptr;
المثلثات [] تشير إلى أن المصفوفة تم حذفها. إذا كنت بحاجة إلى حذف عنصر واحد فقط، لا تحتاج إلى استخدام المثلثات. مثل:
delete ptr;
في C++لمعالجة البرنامج المذكور أعلاه باستخدام منهجية التوجه للكائنات.
#include <iostream> using namespace std; class Test { private: int num; float *ptr; public: Test() { cout << "ادخل عدد الطلاب: "; cin >> num; ptr = new float[num]; cout << "ادخل درجات الطالب." << endl; for (int i = 0; i < num; ++i) { cout << "طالب" << i + 1 << " : "; cin >> *(ptr + i); } } ~Test() { delete[] ptr; } void Display() { cout << "\nعرض درجات الطالب." << endl; for (int i = 0; i < num; ++i) { cout << "طالب" << i+1 << " : " << *(ptr + i) << endl; } } }; int main() { Test s; s.Display(); return 0; }
يكون خروج البرنامج نفسه كما في نتيجة البرنامج المسبق.
تُدعى وظيفة التأسيس عند إنشاء كائن s، وتُخصص ذاكرة للبيانات العددية.
تُدعى الوظيفة التدميرية تلقائيًا عند تدمير الكائن، أي عند خروج الكائن من نطاقه.
~Test() { delete[] ptr; }
هذه الوظيفة التدميرية تنفذ delete[] ptr; وتعيد الذاكرة إلى نظام التشغيل.