رفتن به محتوا
ماژول 3

حافظه و منابع

مدل مالکیت ‎C++‎ را از اشاره‌گرهای خام تا اشاره‌گرهای هوشمند و معناشناسی انتقال (move semantics) فرا بگیرید تا کدی بنویسید که هرگز نشت حافظه نداشته باشد.

اشاره‌گرها و ارجاع‌ها

  1. اشاره‌گرها: آدرس‌ها، ارجاع‌زدایی و محاسبات اشاره‌گر

    اشاره‌گرها را به عنوان آدرس‌های حافظه درک کنید، عملگرهای آدرس‌دهی و ارجاع‌زدایی، محاسبات اشاره‌گر درون آرایه‌ها، صحت const با اشاره‌گرها و زمان مناسب استفاده از اشاره‌گرهای خام در ‎C++‎ مدرن را بیاموزید.

  2. ارجاع‌ها: Lvalue، Rvalue و دام‌ها

    ارجاع‌های lvalue و rvalue را بررسی کنید، دسته‌بندی مقادیر ‎C++‎ را درک کنید، قوانین فروپاشی ارجاع و ارجاع‌های ارسال (forwarding references) را بیاموزید و از باگ‌های ارجاع معلق اجتناب کنید.

  3. حافظه پویا: new، delete و خطرات آن‌ها

    نحوه کار تخصیص حافظه پویا با new و delete را بیاموزید، خطرات نشت حافظه، آزادسازی مضاعف (double-free) و استفاده پس از آزادسازی (use-after-free) را درک کنید و دلیل اینکه ‎C++‎ مدرن باید صفر new/delete خام داشته باشد را کشف کنید.

اشاره‌گرهای هوشمند

  1. std::unique_ptr: مالکیت انحصاری

    بیاموزید که چگونه std::unique_ptr مالکیت انحصاری با سربار صفر فراهم می‌کند، نحوه استفاده از make_unique، حذف‌کننده‌های سفارشی برای منابع C و الگوهای تابع کارخانه‌ای.

  2. shared_ptr، weak_ptr و گراف‌های مالکیت

    مالکیت اشتراکی مبتنی بر شمارش ارجاع با shared_ptr را درک کنید، چرخه‌ها را با weak_ptr بشکنید، درباره بلوک‌های کنترل و نام‌گذاری مستعار بیاموزید و بدانید چه زمانی shared_ptr انتخاب نادرستی است.

معناشناسی انتقال و RAII

  1. معناشناسی انتقال و std::move

    مشکلی که معناشناسی انتقال حل می‌کند را درک کنید، بدانید که std::move یک تبدیل نوع (cast) است نه یک انتقال، سازنده انتقال و عملگر تخصیص انتقال را پیاده‌سازی کنید و بیاموزید چرا noexcept برای عملکرد ظروف حیاتی است.

  2. ارسال کامل و std::forward

    درک کنید که چرا ارجاع‌های rvalue نام‌دار lvalue هستند، الگوی استاندارد ارسال با std::forward را بیاموزید و ببینید چگونه emplace_back از ارسال متغیر (variadic forwarding) برای ساخت اشیاء در محل استفاده می‌کند.

  3. RAII: الگوی اساسی مدیریت منابع

    RAII (تحصیل منبع همان مقداردهی اولیه است) را بیاموزید — الگوی اصلی ‎C++‎ برای مدیریت منابع ایمن در برابر استثنا. پوشش‌دهنده‌های RAII را پیاده‌سازی کنید، lock_guard و scoped_lock را درک کنید و بیاموزید چرا انواع RAII باید فقط قابل انتقال یا شمارش‌شده با ارجاع باشند.

حافظه پیشرفته

  1. چیدمان حافظه، هم‌ترازی و نمایش شیء

    الزامات لایه‌گذاری و هم‌ترازی ساختار را درک کنید، ترتیب اعضا را برای اندازه بهینه‌سازی کنید، درباره خطوط کش و اشتراک‌گذاری کاذب بیاموزید و از ویژگی‌های ‎C++‎20 مانند [[no_unique_address]] برای چیدمان‌های فشرده استفاده کنید.