کار کردن با دادهی قرضگرفتهشده
شاید بشه قوانین راست برای رفرنسها رو اینطوری خلاصه کرد:
- راست فقط اجازه میده یا یه رفرنس mutable داشته باشیم یا چند تا رفرنس non-mutable، ولی نه هر دو با هم.
- یه رفرنس هیچوقت نباید از مالکش عمر بیشتری داشته باشه.
این معمولاً وقتی که رفرنسها رو به تابعها پاس میدیم، مشکلی ایجاد نمیکنه.
جزئیات حافظه:
- قانون اول رفرنسها جلوی data race رو میگیره. data race چیه؟ وقتی که خوندن از داده امکان داره خارج از سینک باشه، چون یه نویسنده همزمان روی همون داده داره مینویسه، یه data race اتفاق میفته. این توی برنامهنویسی چندنخی (multi-threaded) خیلی پیش میاد.
- قانون دوم رفرنسها جلوی سوءاستفاده از رفرنسهایی رو میگیره که به دادهای اشاره میکنن که دیگه وجود نداره (توی C بهشون dangling pointer میگن).