PDA

View Full Version : سوال: در مورد Smart Pointer



khorzu
پنج شنبه 01 مهر 1389, 09:52 صبح
سلام
در مورد Smart Pointer اینکه چی کار می کنه و کاربردش چیه اگه کمک کنید ممنون می شم.

PC2st
پنج شنبه 01 مهر 1389, 11:18 صبح
واقعیت اینکه برای استفاده از حافظهٔ free store (همان heap) نیاز حتمی به مدیریت دستی حافظه نیست و با توجه به مکانیزم الگوی طراحی RAII، مفهوم smart pointerها معنا پیدا می‌کند.

smart pointerها انواع مختلفی دارد؛ ۱) انواعی که تنها وظیفهٔ پاکسازی منابع را دارند (auto_ptr و unique_ptr که جایگزینی برای auto_ptr در C++‎0x است). ۲) انواعی که وظیفهٔ شمارش تعداد ارجاع‌ها و مدیریت همهٔ ارجاع‌ها بر عهدهٔ آنهاست (زمانیکه هیچ ارجاعی به منابع وجود نداشت، آن را پاکسازی می‌کند. مثل shared_ptr).

زمانیکه نیازی به مدیریت دستی منابع اخذ شده نیست و یکی از انواع smart pointer جوابگوی نیازهاست، بهتر است از آنها استفاده شود به خاطر سادگی در استفاده و راحتی افکار برنامه‌نویس در قبال مسئولیت پاکسازی.

از unique_ptr در زمانی استفاده کنید که نمی‌خواهید خود را درگیر مدیریت حافظه کنید. اگر کتابخانه می‌نویسید، در نظر داشته باشید که سایر برنامه‌نویس‌ها در صورت برخورد با حالتی که باید منابع را دستی مدیریت کنند (در حالبکه نیازی به پاکسازی دستی نبوده)، احتمالاً احساس خوبی به آنها دست نخواهد داد (بخصوص آنهایی که هنوز بخوبی مدیریت منابع را یاد نگرفته‌اند!).

از shared_ptr در زمانی استفاده کنید که می‌خواهید یک منبع اخذ شده از سیستم را در اختیار قسمت‌های مختلفی از برنامه قرار دهید (به اشتراک بگذارید). در این حالت، مطمئناً استفاده از shared_ptr بسیار راضی کننده است تا اینکه فکر خود را در قبال مدیریت منبع و شمارش ارجاع‌ها درگیر کنید. شمارش ارجاع‌ها و به اشتراک‌گذاری منابع، موردی است که در سایر کتابخانه‌ها مثل GTK نیز استفاده شده است. در دات‌نت نیز مکانیزم مشابهی صورت می‌گیرد اما زمان پاکسازی منابع مشخص نیست و زباله‌روب در مورد آن تصمیم می‌گیرد.

بطور کلی در حالتیکه شما کدهای سطح بالا می‌نویسید، بهتر است از unique_ptr و shared_ptr به جای استفادهٔ مستقیم از اشاره‌گرها استفاده کنید.

Salar Ashgi
پنج شنبه 01 مهر 1389, 11:40 صبح
به لینک زیر هم سری بزنید :
http://en.wikipedia.org/wiki/Smart_pointer