
آموزش جامع زبان برنامهنویسی C++ مقدماتی تا پیشرفته [0 تا 100 سی پلاس پلاس بهمراه حل تمرین و پروژه ✅] - اشارهگر مشترک در ++C - قسمت 83
مقدمه
در این مقاله، به بررسی کلاس shared_ptr
در زبان برنامهنویسی C++ و کاربردهای آن خواهیم پرداخت. این کلاس به عنوان یکی از دو نوع اصلی اسمارت پوینترها در C++، در مقایسه با unique_ptr
، برای مدیریت حافظه و جلوگیری از مشکلات مربوط به حافظه، کاربردهای زیادی دارد. در اینجا به توضیحات، کدهای نمونه و نکات کلیدی پیرامون shared_ptr
میپردازیم.
1. معرفی Shared Pointer
shared_ptr
یکی از کلاسهای استاندارد کتابخانه C++ است که برای مدیریت خودکار حافظه و جلوگیری از نشت حافظه (memory leaks) طراحی شده است. بر خلاف unique_ptr
که تنها یک مالک برای شیء دارد، shared_ptr
اجازه میدهد تا چندین اشارهگر به یک شیء مشترک وجود داشته باشد.
2. تعریف کلاس و ساخت Shared Pointer
برای استفاده از shared_ptr
، ابتدا باید شامل هدر <memory>
شویم. در ادامه، مثالی از نحوه تعریف و استفاده از shared_ptr
ارائه میشود:
#include
#include
class MyClass {
public:
int data;
MyClass(int value) : data(value) {
std::cout << "Constructor called with value: " << data << std::endl;
}
~MyClass() {
std::cout << "Destructor called for value: " << data << std::endl;
}
int getData() const {
return data;
}
};
int main() {
std::shared_ptr ptr1 = std::make_shared(25);
std::shared_ptr ptr2 = std::make_shared(46);
std::cout << "Data from ptr1: " << ptr1->getData() << std::endl;
std::cout << "Data from ptr2: " << ptr2->getData() << std::endl;
// Sharing ownership
ptr1 = ptr2;
std::cout << "Data from ptr1 after sharing ownership: " << ptr1->getData() << std::endl;
std::cout << "Reference count of ptr1: " << ptr1.use_count() << std::endl;
return 0;
}
3. نحوه کار با Shared Pointer
- ساخت Shared Pointer: std::make_shared یک شیء جدید از کلاس MyClass ایجاد کرده و یک shared_ptr به آن شیء برمیگرداند. این روش به دلیل کاهش overhead حافظه و سرعت بالاتر توصیه میشود.
- انتقال مالکیت: با انتساب یک shared_ptr به دیگری (مثل ptr1 = ptr2)، مالکیت به اشتراک گذاشته میشود و تعداد مراجع (reference count) افزایش مییابد. به عبارت دیگر، هر دو shared_ptr به یک شیء واحد اشاره میکنند.
- تعداد مراجع (Reference Count): متد use_count() تعداد shared_ptr هایی که به یک شیء اشاره میکنند را برمیگرداند. وقتی تعداد مراجع به صفر میرسد، شیء به طور خودکار حذف میشود.
4. مزایا و معایب Shared Pointer
مزایا:
- مدیریت حافظه خودکار: shared_ptr به طور خودکار حافظه را مدیریت میکند و از نشت حافظه جلوگیری میکند.
- اشتراکگذاری آسان: میتوان چندین shared_ptr را به یک شیء مرتبط کرد و آن را به اشتراک گذاشت.
معایب:
- Overhead بیشتر: به دلیل مدیریت شمارش مراجع و مدیریت حافظه، shared_ptr ممکن است مصرف حافظه بیشتری نسبت به unique_ptr داشته باشد.
- ممکن است به مشکلات حلقههای مرجعی منجر شود: اگر دو یا چند شیء به یکدیگر اشاره کنند، ممکن است حافظه آزاد نشود.
نتیجهگیری
در این مقاله، به بررسی جامع shared_ptr در C++ پرداختیم و نحوه تعریف، استفاده و مزایا و معایب آن را شرح دادیم. shared_ptr ابزار قدرتمندی برای مدیریت حافظه در C++ است که به طور مؤثر به کاهش مشکلات حافظه کمک میکند. با این حال، باید توجه داشت که استفاده مناسب از آن و درک کامل مزایا و معایب آن، برای استفاده مؤثر از این ابزار ضروری است.
منابع خارجی مرتبط
ادامه دوره (قسمت 84)
در قسمت بعدی به اشارهگر ضعیف (Weak Pointer) خواهیم پرداخت. اگر سوالی دارید، در بخش دیدگاه مطرح کنید. همچنین ممنون میشم با حمایت دلنشینتون از من و دورهها حمایت کنید.
اشارهگر مشترک در ++C
حق کپی ویدئو مجاز نمیباشد
قسمت:
جلسه هشتاد و سه
نام دوره:
آموزش جامع ++C
زمان ویدئو:
15 دقیقه
مدرس:
مهدی کاظمی
در این قسمت یادخواهید گرفت:
در این مقاله، به بررسی کلاس shared_ptr در زبان برنامهنویسی C++ و کاربردهای آن خواهیم پرداخت. این کلاس به عنوان یکی از دو نوع اصلی اسمارت پوینترها در C++، در مقایسه با unique_ptr، برای مدیریت حافظه و جلوگیری از مشکلات مربوط به حافظه، کاربردهای زیادی دارد. در اینجا به توضیحات، کدهای نمونه و نکات کلیدی پیرامون shared_ptr میپردازیم.
