PDA

View Full Version : تفاوت strong pointer با shared pointer و weak pointer چیست و در چه زمانی باید از آنها استفاده کرد؟



p_ooya
چهارشنبه 10 خرداد 1391, 02:48 صبح
سلام به همه.

من اخیراً بعد از مدت‌ها جاوا نویسی مجدداً به سی پلاس پلاس برگشتم و به این دوری باعث شده با مفهوم پوینتر مشکل پیدا کنم.
سوال من اینه که تفاوت این سه نوع اشاره‌گر (weak, strong, shared)‌ در چیه و از هرکدوم در چه زمانی باید استفاده کرد. سپاس گذار هستم اگر پاسختون رو با یک مثال شی‌گرا مطرح کنید.

پیشاپیش ممنون.
پویا.

_hamid
شنبه 13 خرداد 1391, 21:41 عصر
:)) یعنی چه حسی بهت گفته که کل جامعه برنامه نویسی اینجان؟! :دی

در سی پلاس پلاس(core) دو نوع اشاره گر داریم: reference و pointer.
که فکر می کنم این اون چیزی نیست که تو دنبالشی.

برنامه نویس ها برای راحتی کار خودشون و درگیر نشدن با مسایل جزئی تری چون مدیریت منابع (heap , new and delete) شروع به تعریف کلاس هایی می کنند که یک نوع نگهدارنده(container) ی pointer هست و درصورت خارج شدن از scope و لازم بودن برگرداندن منابع به سیستم آنها را به سیستم بر می گردانند( destructors - delete )؛ البته با توجه به اینکه این کلاس ها و ساختار ها در فریم ورک های مختلف چون boost و qt و ... می توانند با انواع نام های مختلف وجود داشته باشند.

برای مثال می تونم به کتابخانه ی boost یا Libstdc++ c++11 اشاره کنم:

unique_ptr ( یا strong pointer?!) :
این نوع ساختار در صورت خارج شدن از scope به صورت خودکار حافظه را به صورت خودکار به سیستم بر می گرداند.

shared_ptr :
این نوع ساختار با توجه به تعداد کپی های موجود با روش reference couting و در صورت صفر شدن تعداد کپی های از خود حافظه را بر می گرداند به سیستم.

اگر واقعا می خوای بدونی که این اشاره گر ها چی هستند و چجوری کار می کنند می تونی از گوگل سوال کنی یا بری به آدرس http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/smart_ptr.htm و بخونی.