C++ Tutorial - part 83

آموزش جامع زبان برنامه‌نویسی 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 <iostream>
#include <memory>

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<MyClass> ptr1 = std::make_shared<MyClass>(25);
    std::shared_ptr<MyClass> ptr2 = std::make_shared<MyClass>(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) خواهیم پرداخت. اگر سوالی دارید، در بخش دیدگاه مطرح کنید. همچنین ممنون میشم با حمایت دلنشینتون از من و دوره‌ها حمایت کنید.

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

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

اشاره‌گر مشترک در ++C

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

قسمت:

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

نام دوره:

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

زمان ویدئو:

15 دقیقه

مدرس:

مهدی کاظمی

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

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

مهدی کاظمی

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

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

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