0Pricing
C++ Academy · درس

دورة حياة الكائن

تعرّف على وقت إنشاء الكائنات وتدميرها

دورة حياة الكائن درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

متى تولد الكائنات

يبدأ عمر الكائن بعد تخصيص مساحة تخزين له وانتهاء تنفيذ منشئه. ومنذ تلك اللحظة يصبح قابلًا للاستخدام بالكامل.

#include <iostream>

struct Widget {
    Widget() { std::cout << "born\n"; }
};

int main() {
    Widget w;   // constructor runs here
}

متى تموت الكائنات

ينتهي العمر عند تشغيل المدمر. وبالنسبة إلى كائن موجود على المكدس، يحدث ذلك عند القوس الختامي لنطاقه.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget w;
    std::cout << "alive\n";
}   // ~Widget runs here

ترتيب الإنشاء والتدمير

تُدمَّر الكائنات بترتيب عكسي لترتيب إنشائها. فآخر كائن أُنشئ هو أول كائن يُدمَّر.

#include <iostream>

struct Tag {
    int id;
    Tag(int i) : id(i) { std::cout << "make " << id << "\n"; }
    ~Tag() { std::cout << "drop " << id << "\n"; }
};

int main() {
    Tag a(1);
    Tag b(2);   // dropped before a
}

العمر التلقائي (على المكدس)

تعيش الكائنات التلقائية طوال مدة الكتلة التي تحتويها. وهذا هو نموذج العمر الأكثر شيوعًا والأكثر أمانًا.

العمر الديناميكي (على الكومة)

تظل كائنات الكومة المنشأة باستخدام new موجودة حتى استدعاء delete — فأنت من يتحكم في عمرها، وليس النطاق.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget* w = new Widget();
    std::cout << "still alive\n";
    delete w;   // destructor runs here
}

العمر الساكن

تعيش الكائنات ذات التخزين static طوال مدة البرنامج بأكمله. ويُنشأ الكائن الساكن المحلي للدالة مرة واحدة عند أول استخدام له.

#include <iostream>

int next() {
    static int counter = 0;   // built once
    return ++counter;
}

int main() {
    std::cout << next() << next() << next() << "\n";
}

الكائنات المؤقتة

يموت الكائن المؤقت الذي يُنشأ داخل تعبير عادةً عند نهاية التعبير الكامل (أي عند الفاصلة المنقوطة).

#include <iostream>
#include <string>

int main() {
    std::cout << (std::string("a") + "b") << "\n";
}   // temporary string dies after this line

تُنشأ الأعضاء قبل جسم المنشئ

تُنشأ كائنات أعضاء الصنف قبل تنفيذ جسم منشئ الكائن المحتوي، وتُدمَّر بعد تنفيذ جسم مدمره.

#include <iostream>
#include <string>

struct Engine { Engine() { std::cout << "engine\n"; } };
struct Car {
    Engine e;
    Car() { std::cout << "car\n"; }
};

int main() { Car c; }

إطالة العمر بمرجع const

يؤدي ربط كائن مؤقت بـ const& إلى إطالة عمره ليتطابق مع عمر المرجع — وهذه قاعدة مفيدة في C++.

#include <iostream>
#include <string>

int main() {
    const std::string& s = std::string("hi");
    std::cout << s << "\n";   // s still valid
}

الاستخدام بعد انتهاء العمر

إن الوصول إلى كائن بعد انتهاء عمره سلوك غير معرّف — وهو الخطأ الكلاسيكي المتمثل في مرجع معلّق أو استخدام بعد التحرير.

العمر أساس RAII

بما أن المدمرات تعمل بصورة حتمية عند انتهاء العمر، تربط C++ تنظيف الموارد بعمر الكائن — وهذا هو أساس RAII الذي يتناوله المقرر التالي.

اختبار سريع

اختبر مدى فهمك لعمر الكائن.

مراجعة

تعلّمت أن عمر الكائن يبدأ بعد إنشائه وينتهي بتدميره. تتبع الكائنات التلقائية النطاق، وتتبع الكائنات الديناميكية new/delete، بينما تستمر الكائنات الساكنة طوال البرنامج. ويحدث التدمير بترتيب عكسي — وهذا هو أساس RAII.

الأسئلة الشائعة

هل درس «دورة حياة الكائن» مجاني؟

نعم — نص درس «دورة حياة الكائن» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «دورة حياة الكائن»؟

تعرّف على وقت إنشاء الكائنات وتدميرها تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «دورة حياة الكائن»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تخصيص الذاكرة على المكدس
  2. تخصيص الذاكرة على الكومة باستخدام new/delete
  3. دورة حياة الكائن
  4. أخطاء الذاكرة الشائعة
← العودة إلى C++ Academy