درس ۲۰ از ۲۵ · برنامه‌های بزرگ‌تر

مقدار، ارجاع و حافظه

سلام بدون زباله‌روب کار می‌کند؛ برای همین دانستن این‌که مقدارها کی کپی می‌شوند و حافظه کی آزاد می‌شود مهم است.

مقدارها کپی می‌شوند

وقتی ساختاری را در متغیر دیگری می‌گذارید یا به روال می‌فرستید، یک کپی ساخته می‌شود و تغییر کپی روی اصل اثری ندارد. اگر روال باید اصل را تغییر دهد، ورودی را ارجاعی (&:) تعریف کنید.

mem-copy.salam
ساختار حساب:
    همگانی موجودی: صحیح = ۰
پایان

روال واریز(ح &: حساب، مبلغ: صحیح):
    ح.موجودی += مبلغ
پایان

روال ریشه:
    ناپایا الف := حساب { موجودی = ۱۰۰ }
    ناپایا ب := الف
    ب.موجودی = ۵۰۰
    سرچاپ الف.موجودی، ب.موجودی
    واریز(الف، ۲۵)
    سرچاپ الف.موجودی
پایان
خروجی100 500 125

آزادکردن حافظه

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

اشاره‌گر

برای کار با کتابخانه‌های C، سلام اشاره‌گر هم دارد: صحیح* اشاره‌گری به صحیح است، تهی* اشاره‌گر بی‌گونه و پوچ اشاره‌گر خالی است. در کد معمولی سلام به آن‌ها نیازی ندارید.