
آموزش جامع زبان برنامهنویسی C++ مقدماتی تا پیشرفته [0 تا 100 سی پلاس پلاس بهمراه حل تمرین و پروژه ✅] - بررسی اشارهگر هوشمند در ++C - قسمت 81
مقدمه
در این قسمت از دوره آموزشی C++، به بررسی مفاهیم پیشرفتهتر اشارهگرها (پوینترها) و معرفی اسمارت پوینترها میپردازیم. در بخش 11، اشارهگرها را معرفی کردیم و در بخش 12، به اصول شیگرایی پرداختیم. اکنون زمان آن رسیده است که این دو مفهوم را ترکیب کرده و به موضوع اسمارت پوینترها بپردازیم.
اشارهگرها و کاربردهای آنها
اشارهگرها (پوینترها) در C++ ابزاری قدرتمند هستند که میتوانند آدرس یک داده را ذخیره کنند. این قابلیت مزایای بسیاری دارد، از جمله:
- کاهش پیچیدگی برنامهها
- بهبود کارایی و سرعت اجرای برنامهها
- مدیریت بهتر حافظه
- استفاده در آرایههای چند بعدی و ارسال پارامترها به توابع
مشکلات اشارهگرها: Memory Leak
یکی از مشکلات اصلی اشارهگرها، احتمال نشت حافظه (Memory Leak) است. نشت حافظه زمانی رخ میدهد که حافظهای به یک اشارهگر اختصاص داده شود (allocating memory) ولی به درستی آزاد نشود (deallocating memory). این مسئله به خصوص در برنامههای بزرگ و پیچیده میتواند باعث مشکلات جدی شود.
اسمارت پوینترها: راهحل مشکل نشت حافظه
اسمارت پوینترها (Smart Pointers) برای حل مشکل نشت حافظه به وجود آمدهاند. اسمارت پوینترها کلاسی هستند که به عنوان یک رپر یا کانتینر برای اشارهگرهای خام عمل میکنند و به صورت خودکار مدیریت حافظه را انجام میدهند.
مثال: استفاده از اسمارت پوینترها
در ادامه یک مثال ساده برای نشان دادن نحوه استفاده از اشارهگرهای خام و اسمارت پوینترها را مشاهده میکنید:
اشارهگرهای خام
#include
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
#include
using namespace std;
int main() {
unique_ptr ptr = make_unique(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) را بررسی کردیم و الان وقت آن رسیده تا همه این مباحث و موضوعات را کنار هم قرار بدیم تا...
بررسی اشارهگر هوشمند در ++C
حق کپی ویدئو مجاز نمیباشد
قسمت:
جلسه هشتاد و یک
نام دوره:
آموزش جامع ++C
زمان ویدئو:
8 دقیقه
مدرس:
مهدی کاظمی
در این قسمت یادخواهید گرفت:
در این قسمت از دوره آموزشی C++، به بررسی مفاهیم پیشرفتهتر اشارهگرها (پوینترها) و معرفی اسمارت پوینترها میپردازیم. در بخش 11، اشارهگرها را معرفی کردیم و در بخش 12، به اصول شیگرایی پرداختیم. اکنون زمان آن رسیده است که این دو مفهوم را ترکیب کرده و به موضوع اسمارت پوینترها بپردازیم.
