שימוש ב- C ++ unique_ptr

Use C Unique_ptr



הנקודות החכמות משמשות להקצאת המשאב באופן דינמי. סוגים רבים של מצביעים חכמים משמשים ב- C ++ למטרות שונות, כגון auto_ptr , ייחודי_פטר , ו shared_ptr . המצביע auto_ptr הוצא משימוש בגרסה החדשה של C ++. ה- unique_ptr משמש להחלפת ה- auto_ptr. אובייקט המצביע יכול לקחת בעלות על המצביע. אובייקט המצביע הזה הוא הבעלים של המצביע באופן ייחודי, ואף מצביע אחר אינו יכול להצביע על האובייקט. ה- unique_ptr מוחק את האובייקטים באופן אוטומטי. מצביע זה מנהל את האובייקטים האלה אם האובייקטים נהרסים, או אם ערך האובייקט משתנה או נקראת הפונקציה reset (). התכונות של ה- unique_ptr והשימושים של מצביע זה נדונים במדריך זה.

מרכיבים עיקריים:







להלן שני מרכיבים עיקריים של האובייקט unique_ptr:



א מצביע מאוחסן:



הוא משמש לניהול האובייקטים שנוצרו על ידי מצביע ייחודי. הוא נוצר בזמן יצירת המצביע, וניתן לשנות אותו בדרכים שונות.





ב מחיקה מאוחסנת:

זה לוקח את הארגומנט של סוג המצביע המאוחסן המשמש למחיקת האובייקט המנוהל. הוא נוצר גם בזמן יצירת המצביע, וניתן לשנות אותו בדרכים שונות.



דוגמה 1: צור אובייקט מצביע של מחלקה עם קונסטרוקטור

הדרך להכריז על אובייקטים המצביעים הייחודיים של מחלקה ולגשת לשיטת הכיתה היא באמצעות האובייקטים כפי שמוצג בדוגמה הבאה. כיתה עם בנאי ושיטה ציבורית הוכרזה בקוד. לבנאי יש שלוש טיעונים. המצביע הייחודי הראשון נוצר על ידי קריאה לבנאי בעל שלושה ערכי ארגומנט. ה תוֹצָאָה() שיטה נקראת על ידי אובייקט המצביע המחשב את סכום שלושת ערכי הארגומנט של הבונה. לאחר מכן, אובייקט המצביע הייחודי השני נוצר מבלי לקרוא לבנאי, והמצביע הראשון מועבר למצביע השני. ה תוֹצָאָה() השיטה נקראת על ידי אובייקט המצביע השני.

//כלול ספריות נחוצות

#לִכלוֹל

#לִכלוֹל

usingnamespace std;

//הגדירו את הכיתה
תוספת בכיתה{

int מספר 1, מספר 2, מספר 3;
פּוּמְבֵּי:
//להכריז על הבונה
חיבור(int a, int b, int c)
{
מספר 1 = a;
מספר 2 = ב;
מספר 3 = c;
}
//הצהירו על שיטת חישוב ה-סְכוּם
int תוצאה()
{
לַחֲזוֹרמספר 1 + מספר 2 + מספר 3;
}
};
int main()
{
//הכריז על המצביע הראשון
מצביע ייחודי_פטר 1(תוספת חדשה(ארבע חמש,55,30));

עֲלוּת<<'התוצאה של סכום באמצעות המצביע הראשון:'<תוֹצָאָה() <<' n';
//הכריז על המצביע השני
מצביע ייחודי_פטר 2;
//העבר את המצביע הראשון למצביע השני
מצביע 2 = הזזה(מצביע 1);

עֲלוּת<<'התוצאה של סכום באמצעות המצביע השני:'<תוֹצָאָה() <<' n';
return0;
}

תְפוּקָה:

הפלט הבא יופיע לאחר ביצוע הקוד לעיל. הסכום של 45, 55 ו -30 הוא 130 שהודפס לשני המצביעים.

דוגמה 2: צור אובייקט מצביע של מחלקה עם Constructor ו- Destructor

הדרך להצהיר על אובייקט מצביע ייחודי ממעמד עם קונסטרוקטור והרסנית הוצגה בדוגמה הבאה. המחלקה מכילה קונסטרוקטור עם ארגומנט אחד, שיטה ציבורית בשם Display () לערך משתנה המחלקה, והרס שידפיס הודעת הרס לפני השמדת אובייקט המחלקה. שיטת Display () נקראת לאחר יצירת אובייקט המצביע הייחודי בקוד.

//כלול ספריות נחוצות

#לִכלוֹל

#לִכלוֹל

usingnamespace std;

//הגדירו את הכיתה
לקוח בכיתה
{
שם מחרוזת;

פּוּמְבֵּי:
//להכריז על הבונה
צרכן(מחרוזת n)
{
שם = n;
עֲלוּת<<'המשאב מוקצה. n';
}

//הצהרת שיטה להדפסת שם הלקוח
תצוגת ריק()
{
עֲלוּת<<'שם הלקוח הוא:'<<שֵׁם<<' n';
}

//להכריז על המשחית
~ לקוח()
{
עֲלוּת<<״המשאב נהרס. n';
}
};
int main()
{
//הקצה את אובייקט המשאב שבבעלות ה- unique_ptr
unique_ptruPointer{לקוח חדש('מיר עבאס') };
uPointer->לְהַצִיג();
return0;
}

תְפוּקָה:

הפלט הבא יופיע לאחר ביצוע הקוד לעיל:

דוגמה 3: בדוק את המצביע לאחר העברת הבעלות

הדרך לבדוק את הבעלות על המצביע הייחודי הראתה בדוגמה הבאה על ידי יצירת שני מצביעים ייחודיים של מחלקה. כיתה עם שני משתני מחרוזת ושיטה ציבורית הוכרזה בקוד. שיטת Book_details () של הכיתה נקראת לאחר יצירת אובייקט המצביע הייחודי הראשון של המחלקה. לאחר מכן, אובייקט המצביע הייחודי השני נוצר, והמצביע הראשון הועבר למצביע השני שהורס את המצביע הראשון. יש לבדוק את הבעלות על שתי הנקודות מאוחר יותר.

//כלול ספריות נחוצות

#לִכלוֹל

#לִכלוֹל

usingnamespace std;

//הגדירו את הכיתה
ספר כיתה{

כותרת מחרוזת ='שפת התכנות C ++';
מחבר מחרוזת ='ביארנה סטרוסטרופ';

פּוּמְבֵּי:
//הצהירו על שיטת הדפסת פרטי הספר
voidBook_details()
{
עֲלוּת<<'שם הספר:'<<כותרת<<' n';
עֲלוּת<<'שם המחבר:'<<מְחַבֵּר<<' n';
}
};
int main()
{
//הכריז על המצביע הראשון
מצביע ייחודי_פטר 1(ספר חדש());

מצביע 1->ספר_פרטים();
//הכריז על המצביע השני
מצביע ייחודי_פטר 2;
//העבר את המצביע הראשון למצביע השני
מצביע 2 = הזזה(מצביע 1);

//בדוק את המצביע הראשון
אם (שידור סטטי(מצביע 1))עֲלוּת<<״המצביע הראשון אינו בטל n';
ללא תשלום<<״המצביע הראשון בטל n';
//בדוק את המצביע השני
אם (שידור סטטי(מצביע 2))עֲלוּת<<״המצביע השני אינו בטל n';
ללא תשלום<<״המצביע השני בטל n';

return0;
}

תְפוּקָה:

הפלט הבא יופיע לאחר ביצוע הקוד לעיל. על פי התפוקה, הבעלות על המצביע הראשון הוסרה, וההודעה, המצביע הראשון הוא אפס הדפיס עבור המצביע הראשון. הבעלות על המצביע השני קיימת, והמסר, המצביע הראשון אינו בטל הדפיס עבור המצביע השני:

סיכום:

מטרות השימוש במצביע ייחודי בתכנות C ++ תוארו במדריך זה על ידי שימוש במספר דוגמאות. הדרכים ליצירת מצביע ייחודי, העברת הבעלות על המצביע ובדיקת הבעלות הנוכחית של המצביע הוסברו כאן כדי לסייע לקוראים להכיר את השימוש במצביע הייחודי כראוי.