מצביע חכם
במדעי המחשב, מצביע חכם הוא מעטפת (wrapper) למצביע (pointer) תוך מתן תכונות נוספות, למטרת ניהול זיכרון אוטומטי. בשפת C ו-++C, בניגוד לשפות בעלות מנגנון איסוף זבל כדוגמת Java או #C, האחריות על שחרור הזיכרון שהוקצה מוטלת על המתכנת. עם זאת, השפה לא אוכפת בזמן ההידור את ניהול הזיכרון. מסיבה זו, באגים הנובעים מטעויות בניהול זיכרון הם בעיה חמורה ושכיחה ביותר בתכנות בשפת C/++C. בין הבאגים הנפוצים ביותר ניתן למנות את דליפת הזיכרון הנגרמת כתוצאה מהקצאת זיכרון שלא שוחררה ומצביע מתנדנד (dangling pointer) המצביע לזיכרון שכבר שוחרר.
מצביעים חכמים מונעים את מרבית הבאגים הקשורים לזיכרון על ידי הסרת האחריות מהמתכנת על שחרור הזיכרון והריסת האובייקט. אובייקט המנוהל על ידי מצביע חכם נהרס אוטומטית וזיכרונו משוחרר כאשר הבעלים האחרון (או היחיד) של האובייקט נהרס. למשל, אם המצביע החכם הוא משתנה מקומי, האובייקט ייהרס והזיכרון המוקצה ישתחרר עם היציאה מהסקופ. בצורה זו נמנע מצב של דליפת הזיכרון שהרי הזיכרון המוקצה משתחרר ללא תלות בנקודת היציאה מהסקופ וכן לא ייווצר מצביע מתנדנד מכיוון שהשחרור יתבצע רק כאשר המצביע לא יהיה עוד בשימוש.
קיימים מספר סוגים של מצביעים חכמים. החלוקה הבסיסית היא למצביעים עם בעלות ייחודית על אובייקט ולמצביעים המאפשרים בעלות משותפת על אובייקט. למצביעים המאפשרים בעלות משותפת ישנו מונה פנימי הסופר את מספר המצביעים המתייחסים אליו. ברגע שמספר ההתייחסויות יורד ל-0 (קרי, לא נותרו עוד מצביעים המפנים לזיכרון), האובייקט נמחק באופן אוטומטי.