Skip to Sidebar Skip to Content
اقرأ-تك اقرأ-تك
ضيفنا الكريم

  • قائمة القراءة
  • تسجيل الدخول
  • الرئيسية
  • المقالات
  • خطط الاشتراك
  • - اصدارتنا
  • ورقة وقلم
  • مدونات فطين
  • شنطة مبرمج
  • النشرة الأسبوعية
  • كنوز
  • - تعرف علينا
  • من نحن
  • الشراكات
  • كتاب المحتوى
  • اكتب معنا
  • تواصل معنا
  • - بنود الخدمة
  • سياسة الخصوصية
  • الشروط والأحكام
الوسوم
  • Backend
  • Distributed Systems
  • System Design
  • Databases
  • LinkedIn
  • X
  • Facebook
  • Telegram
  • GitHub
جميع الحقوق محفوظة لمنصة اقرأ-تِك 2024©

Gentle Introduction Into Modern C++

  • Omar Magdy by Omar Magdy
    Omar Magdy Omar Magdy
    Software Technical Writer
    • Website
  • •
  • 9 Feb, 2024
  • •
  • 3 min read
  • Share on X
  • Share on Facebook
  • Share on LinkedIn
  • Share on Pinterest
  • Email
Gentle Introduction Into Modern C++
  • CPlusPlus
  • Programming Language

مقدمة

لغة C++ هي من اللغات المستخدمة بكثافة في الجامعات لتدريس مواد مثل الخوارزميات و أنظمة التشغيل و هي اللغة اللي وراء أهم ال Technologies اللي بنستخدمها يومياً مثل WebBrowsers: ChromiumEngine, Firefox و تقريباً كل الGame Engines: Unreal Engine, Unity, Godot و معظم ال Databases و الجرافيكس سوفتوير كلها مكتوبة ب C++ و مع كل هذا ألاحظ أن ما يدرس عن اللغة لا يتعدي عن ما تعلمته في لغة C لكن مع اضافة Classes و لكن في الحقيقة C++ أكبر بكثير من مجرد C + Classes و هذا ما سوف تستفيض فيه هذه المقالة عن الإضافات التي تم اضافتها بعد C++11 و سنتكلم عن أهم مفهوم Concept في Modern C++ و هو RAII


RAII

ال RAII و هي اختصار ل Resource Acquisition Is Initialization و الفكرة ورا الكلام اللي يبان كبير و صعب ده ان كل Hardware resource سواء (Memory, File handles, network connections) هيبقي مربوط بال lifetime بتاع الobject اللي بيعبر عنه و الlifetime بتاعت الobject هي بتعبر عن امتي الobject ده هيفضل In Scope و بكده كل object هيستحوذ علي شوية Hardware resources لما تعمله Construct و هيحررfree الresources ديه لما يبقي out of scope و سعتها الdestructor بتاع الobject تلقائياً هيتعمله call و هنلاقي مفهوم الRAII ده مطبق في تقريباً كل الobjects في ال std مثلاً std::ifstream

# include <iostream>
# include <fstream>
# include <string>

int main() {
    std::ifstream inFile("example.txt");

		// Handle errors
    if (!inFile.is_open()) {
        std::cerr << "Could not open the file." << std::endl;
        return 1;
    }

    // Read and output the contents of the file
    std::string line;
    while (std::getline(inFile, line)) {
        std::cout << line << std::endl;
    }

    // File is automatically closed when inFile goes out of scope

    return 0;
}

في الCode Example ده أنا مش مضطر أفتكر أقفل الFile بعد مستخدمه هو هيقفل لوحده لما يبقي out of scope و ده ببساطة الRAII اللي قايم عليه lمفاهيم كتير في C++


Manual Memory Management

قبل منفهم ما هو ال Smart Pointer لازم نفهم ايه المشكلة اللي ال Smart Pointer بيحاول يحلها و عشان كده لازم نتكلم شوية عن ال Manual Memory Management و هو ببساطة الطريقة اللي احنا متعودين ندير بيها الMemory في لغة الC و هي ان كل ما هنعمل Allocation علي الheap لازم نفتكر نعمله free بعد منخلص استخدامه و هي طريقة بتعتمد بشكل كبير علي ان المبرمجين يتتبعوا كل Allocation علي ال heap ويعرفوا فين بظبط يعملوله free وهي طريقة error prone جداًُ و كانت سبب لMemory bugs كتير جداً في العقود السابقة و عشان كده هنتكلم عن 3 من اشهر الMemory bugs

Dangling pointers

هذا المقال مخصص للأعضاء المنتسبين لخطط الاشتراك المدفوعة فقط

اشترك الآن وتصفح كافة المقالات المميزة واستمتع بمحتوى حصري وابق على اطلاع دائم بالتحديثات المستمرة.

اشترك الآن 🚀

هل لديك حساب؟ تسجيل الدخول

في هذا المقال
اشترك الآن واكمل قراءة المقال
قناة اقرأ-تِك على التليجرام قناة اقرأ-تِك على التليجرام

اشترك الآن بنشرة اقرأ‑تِك الأسبوعية

لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!

مقالات ذات صلة

  • Move Semantics in C++ 3 min read

    Move Semantics in C++

    Omar Magdy Omar Magdy • 1 May, 2024
    Omar Magdy Omar Magdy
    Software Technical Writer
    • Website
اقرأ-تك اقرأ-تك
  • الرئيسية
  • المقالات
  • خطط الاشتراك
  • - اصدارتنا
  • ورقة وقلم
  • مدونات فطين
  • شنطة مبرمج
  • النشرة الأسبوعية
  • كنوز
  • - تعرف علينا
  • من نحن
  • الشراكات
  • كتاب المحتوى
  • اكتب معنا
  • تواصل معنا
  • - بنود الخدمة
  • سياسة الخصوصية
  • الشروط والأحكام
الوسوم
  • Backend
  • Distributed Systems
  • System Design
  • Databases
  • LinkedIn
  • X
  • Facebook
  • Telegram
  • GitHub
جميع الحقوق محفوظة لمنصة اقرأ-تِك 2024©