C++ Tutorial - part 81

آموزش جامع زبان برنامه‌نویسی C++ مقدماتی تا پیشرفته [0 تا 100 سی پلاس پلاس بهمراه حل تمرین و پروژه ✅] - بررسی اشاره‌گر هوشمند در ++C - قسمت 81

مقدمه

در این قسمت از دوره آموزشی C++، به بررسی مفاهیم پیشرفته‌تر اشاره‌گرها (پوینترها) و معرفی اسمارت پوینترها می‌پردازیم. در بخش 11، اشاره‌گرها را معرفی کردیم و در بخش 12، به اصول شی‌گرایی پرداختیم. اکنون زمان آن رسیده است که این دو مفهوم را ترکیب کرده و به موضوع اسمارت پوینترها بپردازیم.

اشاره‌گرها و کاربردهای آن‌ها

اشاره‌گرها (پوینترها) در C++ ابزاری قدرتمند هستند که می‌توانند آدرس یک داده را ذخیره کنند. این قابلیت مزایای بسیاری دارد، از جمله:

  • کاهش پیچیدگی برنامه‌ها
  • بهبود کارایی و سرعت اجرای برنامه‌ها
  • مدیریت بهتر حافظه
  • استفاده در آرایه‌های چند بعدی و ارسال پارامترها به توابع

مشکلات اشاره‌گرها: Memory Leak

یکی از مشکلات اصلی اشاره‌گرها، احتمال نشت حافظه (Memory Leak) است. نشت حافظه زمانی رخ می‌دهد که حافظه‌ای به یک اشاره‌گر اختصاص داده شود (allocating memory) ولی به درستی آزاد نشود (deallocating memory). این مسئله به خصوص در برنامه‌های بزرگ و پیچیده می‌تواند باعث مشکلات جدی شود.

اسمارت پوینترها: راه‌حل مشکل نشت حافظه

اسمارت پوینترها (Smart Pointers) برای حل مشکل نشت حافظه به وجود آمده‌اند. اسمارت پوینترها کلاسی هستند که به عنوان یک رپر یا کانتینر برای اشاره‌گرهای خام عمل می‌کنند و به صورت خودکار مدیریت حافظه را انجام می‌دهند.

مثال: استفاده از اسمارت پوینترها

در ادامه یک مثال ساده برای نشان دادن نحوه استفاده از اشاره‌گرهای خام و اسمارت پوینترها را مشاهده می‌کنید:

اشاره‌گرهای خام

				
					#include <iostream>

using namespace std;

int main() {
    int* ptr = new int(25); // اختصاص حافظه به پوینتر
    cout << "Address: " << ptr << ", Value: " << *ptr << endl;

    delete ptr; // آزادسازی حافظه
    ptr = nullptr; // جلوگیری از نشت حافظه

    if (ptr) {
        cout << "Pointer exists" << endl;
    } else {
        cout << "Pointer does not exist" << endl;
    }

    return 0;
}

				
			

اسمارت پوینترها

				
					#include <iostream>
#include <memory>

using namespace std;

int main() {
    unique_ptr<int> ptr = make_unique<int>(25); // استفاده از اسمارت پوینتر برای مدیریت حافظه
    cout << "Address: " << ptr.get() << ", Value: " << *ptr << endl;

    // اسمارت پوینتر به صورت خودکار حافظه را آزاد می‌کند

    if (ptr) {
        cout << "Pointer exists" << endl;
    } else {
        cout << "Pointer does not exist" << endl;
    }

    return 0;
}

				
			

نتیجه‌گیری

در این قسمت از دوره آموزشی، به بررسی اشاره‌گرها و مشکلات مربوط به آن‌ها پرداختیم و اسمارت پوینترها را به عنوان راه‌حلی برای مدیریت خودکار حافظه معرفی کردیم. در قسمت‌های بعدی، با انواع اسمارت پوینترها شامل unique_ptr، shared_ptr و weak_ptr بیشتر آشنا خواهیم شد.

منابع خارجی مرتبط

ادامه دوره (قسمت 82)

در قسمت بعدی به اشاره‌گر یکتا خواهیم پرداخت. اگر سوالی دارید، در بخش دیدگاه مطرح کنید. همچنین ممنون میشم با حمایت دلنشینتون از من و دوره‌ها حمایت کنید.

در قسمت‌های قبلی مباحث مختلفی از شی‌گرایی (OOP) را بررسی کردیم و الان وقت آن رسیده تا همه این مباحث و موضوعات را کنار هم قرار بدیم تا...

در این قسمت، قصد داریم تا با unique_ptr به طور کامل آشنا شویم و...

بررسی اشاره‌گر هوشمند در ++C

حق کپی ویدئو مجاز نمی‌باشد

قسمت:

جلسه هشتاد و یک

نام دوره:

آموزش جامع ++C

زمان ویدئو:

8 دقیقه

مدرس:

مهدی کاظمی

در این قسمت یادخواهید گرفت:

در این قسمت از دوره آموزشی C++، به بررسی مفاهیم پیشرفته‌تر اشاره‌گرها (پوینترها) و معرفی اسمارت پوینترها می‌پردازیم. در بخش 11، اشاره‌گرها را معرفی کردیم و در بخش 12، به اصول شی‌گرایی پرداختیم. اکنون زمان آن رسیده است که این دو مفهوم را ترکیب کرده و به موضوع اسمارت پوینترها بپردازیم.

مهدی کاظمی

سلام مهدی کاظمی هستم و باعث افتخارم هست که در یک دوره جذاب دیگه با شما هستم و قراره در کنار هم از یادگیریمون لذت ببریم.

با بانک سوالات طبقه بندی شده ++C مقدماتی تا پیشرفته، جامع ترین منبع برای تسلط بر زبان سی پلاس پلاس و آمادگی کامل برای دروس مبانی و پیشرفته کامپیوتر در رشته مهندسی کامپیوتر را در اختیار خواهید داشت.

0 دیدگاه
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها