← C++ Course – Advanced Topics

מפגש 2 — טמפלטים מתקדמים: specialization, variadic templates ו-metaprogramming

טוען נגן…

תמלול

בתי חולצה. חשבתי שהטיף הורה זה אה טוב מהנים אז התחלתי את ההקלטה איך אומרים להתנהג בהתאם אה נראה זה או the recקורד נוריד בגדים ונעשה מה שרוצים קיצר אנחנו בקורס מתקדם של C++פ+ס שממש כיף שהוא יצא לפועל כי התחילנו בbasic to advance topics ועכשיו אנחנו lבל up מדלים אה ביכולת שלנו לפתח בC+ספ+ס וגם לפני שהתחלתי את ההקלטה דיברנו על המבד לינוקס אז יש כמה כיוונים שאנחנו עכשיו הולכים אליהם מעבר לבר מטל שאנחנו נלמד עם מיכאל שאנחנו הולכים לעשות קורס רציני בפיתוח מערכות אמבד עם MCU של ST שזה כבר ממש מוכון תעשייה ולפתח בדד הרדקור כי ST זה המיקרוקר לפחות חות בישראל המונופול הכי גדול זה ST כל חברה שביקרתי בה של רחפנים ורובוטים והכל יש קטלוג אחד רק של ST וכן עם חברה מאוד דומיננטית בארץ ו אתמול הייתה לנו הרצאה של אור שהוא לימן פה על אמבד לינוקס שזה ה אם אנחנו הולכים לבר מטל יש לנו את האמבד לינוקס שזה שתי גישות איך לפתח למיקרו בקרים ואני אעשה לכם ככה חשיפה ראשונה ב-18 אנחנו ב-18 לחודש רון מתחיל את הקורס FPGA שזה עוד יצור אז יש לנו בתוך MCU שני יצורים את הברמטל ואת הדד Linuxס ואת היצור הכי זר FPGA שאני עדיין מנסה להבין אותו עד הסוף מה למה כמה כאילו איזה סיבות יש ולא לקחת MCU פשוט א שזה פרויקט עכשיו אנחנו עושים PCB לרפאל איזה בורד שהם שמו FPGA שכל כל תקלה אנחנו שואלים למה לא הם סיו למה לא הם סיו אבל בסדר זה גישות לענות לך בקצרה אה כן אם אתה צריך 80 יוורטים אתה לא תמצא עם סיו כזה אבל בPג אתה יכול לממש אותם אה זה יש שם אה יש שם כמה זה מודד טמפרטורות ופותח שסתומים של אה מחליף חום של נוזלים משהו יחסית פשוט בט אוגילד לגמרי FPG ברור אה בסדר גמור אנחנו שוב מאוד מנסים שכל הקורסים שלנו יהיו מקצועיים וטובים ומרצים שידעו את החומר ויעבירו אותו בצורה הכי טובה שיש. מיכאל אומרת יסביר על עצמו אבל זה קורס שני שלנו ויש פה שלושה פרצופים שהיו בקורס הראשון. עוד מעט נועם גם עולה. הוא כתב לי שהוא בפקקים אז א הוא יראה את זה פה.

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

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

מיכאל יאללה, אני אתחיל קודם כל שלום לכולם. ערב טוב למי שערב. כן, ש אה [‏צחוק] א שמי מיכאל וייסמן. אני כבר 17 18 שנים בתחום של פיתוח תוכנה. בעיקר זהבד, אבל לא רק.

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

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

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

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

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

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

יופי אז אנחנו פתחנו Visual Studia. מאוד חשוב שבעצם אתם בזמן התקנה של visual studiודיו אתם תוסיפו פיתוח בC+. א יש גם פיתוח C++ בליקס. אז אני בדרך כלל אני מוסיף הכל מבחינת C++. אחרי זה אנחנו לוחצים על new proect ומאוד חשוב לבחור פה בעצם את השפה נכונה ובעצם סביבה נכונה וכולי כי יש פה הרבה פרויקטים לא יודע עד כמה אתם מכירים סטודיו אבל יש שם הרבה פרויקטים לכל לכל דבר אז א מומלץ לעשות סינון כזה ראשוני א נכון לעכשיו בואו נבחר קונס אקש C++וסקסול אוקיי בחרנו ניתן שם אסון one א אוקיי וואי למה אני עובד עם מסך אחת עושים create יופי ובעצם אנחנו קיבלנו את ה מה שנקרא Hello World א Solution Explore יש פה כל מיני הסברים אני מציע שוב אם אתם לא מכירים את הVual Studio מציע לקרוא גם לקרוא עלזל סטודיו כי זאת סביבה מאוד חזקה מאוד בפונקציות באפשרויות אה אני מה אחר כך אה אני ממש אוהב אותה אה אה למרות שבזמן אחרון לא ממש משתמש בה, אבל מאוד אוהב אותה.

יופי. אה, שוב, קיבלנו קוד, בוא נבדוק שהוא בכלל עובד. קונסול תטיס לנו. רגע, מה הבעיה שלו? רגע, הואפיס הוא התפיס אני לא ראיתי.

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

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

אוקיי, בוא נתחיל, בואו נתחיל מפוינטרים פשוטים. א ככה יש לנו איזשהו פינטר לא. אוקיי, אנחנו עושים אלוקציה. אוקיי, מצוין. מי שיכול לראות אנחנו לא בסוף של ביצוע תוכנה אנחנו לא משחררים את הזיכרון אוקיי אם אנחנו עושים I ש לא לפ i אם אנחנו אנחנו עושים אלוקי הזה א בצורה הבאה א עכשיו אמר כנראה לא יקרה שום דבר למה כי יש לנו המון משאבים במחשב א בעצם הלוקציה לאנ אה שזה ארבע בית בדרך כללכם א היא לא תגרום לנפילה של התוכנה אבל אם אנחנו נפתח רסורס מנג'ר אנחנו בעצם נראה שפתאום ה א שימוש בזיכרון שלנו עולה ובמקרה הזה מה אנחנו צריכים לעשות אחרי שאנחנו מסיימים בעצם את ה את העבודה אה דרך אגב אתם רואים את זה?

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

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

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

יופי. אה, כמו שאמרתי, אוקיי? אז אחרי שאנחנו משחררים, שאנחנו בעצם עושים אלוקציה לזיכרון, מה שאנחנו עושים, אנחנו רושמים del A. אוקיי? לא delegate, אלא delט.

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

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

אוקיי. ארם אר זה בעצם א מקום בזיכרון א שאנחנו מבקשים להקצות כדי לעבוד איתו. יש הקצה סטטית, מה שנקרא אם אנחנו ב באופן יזום מגדירים שאנחנו צריכים איזשהו א a אטו רגע אה וואי אני שכחתי איך אר בספ+ס טוב, גרי מרובעים. אה זהו אני לא תמיד זוכר איך משהו כזה, נכון? אני זוכר שעושים משהו 1 2 3 4 זה החיסרון שאתה משתמש בכמה שפות במביל כי אתה שוכח איך בעצם א אוקיי לדעתי כן אנחנו עושים אלוקציה לאר שבנוי בעצם מ4 אינטים אוקיי שבסופו של דבר זה 16 בייט אם אני לא טועה גם באופן יזום אנחנו יכולים להגדיר שאנחנו רוצים 10.

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

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

כי כאשר אנחנו מתחילים לקרוא את הקוד לנו ברור. אה, רגע, רציתי להגיע לסמרט פינטרים. איפה הם? Resource equition. אוקיי.

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

אה טוטו טו. בוא נמחק את זה בינתיים. יפה בונס. ‏I i מוסz i + עכשיו std יוניק יוניק יוניק יוניק יוני אוקיי ככה ‏P מה עשינו פה? אנחנו השתמשנו באחד הסוגי הפוינטרים שנקרא poינטר.

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

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

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

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

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

כן. א פום אנחנו יכולים לעשות פה אה נכון וואי בלבול הזה מעצבן ח דרך אגב בואו ננסה אולי להפisם מה? אוקיי אי אפשר לעשות את ה nameספיס של std כאילו של סטנדרט שזה [כחכוח] אפשר אני כן אפשר לעשות את מה מפריע לך גם לי? א איך זה using משהו נכון? נו nameספס אמרתי אוקיי א בואו נריץ נראה מה אנחנו בעצם מקבלים לכל הרוחות.

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

הלו א סוגריים על המי פוינטר זה אה לא נראה לי אצלי הוא הציג דרך אגב רק כתובת אחת לא הריץ את כל הכתובות אחד אחרי שלי במה אתה מריץ ב בווינדוס כן ווינדוס רגע הוא טוב בוא בוא ננסה ככה יכול להיות שזה הבדל של גרסה או איזה הוספה של א רכיב הבטחה מסוים שקוראים לזה אני אבדוק את זה שוב יכול להיות איפהשהו טעיתי הכל בסדר לפעמים טועים מה לעשות אוקיי בואו נעשה פה אה Iš ככה כואב כן יותר נוח. אוקיי, בואו נריץ שוב ונבדוק מה אנחנו מקבלים. סבבה סבבה סבבה. פנטר אדריס אדריס אדריס אדריס אדריס משתנה א הוא ממכזר את הכתובות כן אני גם רואה בא לי למה הוא לא מראה למה זה אני לא אוהב משהו לא בסדר רגע רגע רגע זה אוקיי בוא נראה מה הוא לנו אולי במקום ה אתה צריך בלולה במקום האפס להריץ את האינדקס בתוך המי פינטר לא לא כי אנחנו מייצרים כל הזמן ארה נוסף אתן א הייתי מצפה לזה אה ככה שכה נו רגע חברים ‏Eh array בזה אנחנו משתמשים משתמשים בזה אה יש מצב שזה גודל יש מצב שזה גודל בוא ננסה משהו. בואו ננסה משהו ביחד ברשותכם.

אם זה היה הגודל הזה לא היה אמור להיות בתוך הסוגריים המרובעים. אה כשאנחנו משתמשים בוניק פינטר אנחנו בעצם מגדירים א אתם זוכרים טמפליטים מסc+ספ+ס? לא. אוקיי אז בעצם make unqueק זה template כמו שאמרתי מעטפת סביב סביב פינטרים ש בעצם זה הטיפ שהיא מקבלת אוקיי אז בגלל זה אנחנו לא מכניסים פה את הערך כי אנחנו צריכים להעביר את הטייפ של מה שאנחנו רוצים א א לייצר אבל אני רוצה לעשות משהו אחר בוא נראה פה אוקיי אנחנו נעשה PTP כן לדעתי זה יעבוד עכשיו עכשו פה אנחנו מה נעשה אš אוקיי עוד בדיקה עוד בדיקה אנחנו יכולים לבדוק אהסיז או יש לנו דבר כזה ‏siז offיזיז ptrפ אה דרך אגב אם זאת מעטפת אני אקבל משהו לא נכון אם זה מעפת אז בואו נבדוק את זה בצורה הבאה בצורה הבאה אוקיי תשע מה שאני א שאני עושה עכשיו אני בעצם בודק את ה א אינדקס המקסימלי האפשרי לפוינטר מריץ מה הוא יגיד לי הוא יגיד לי שהכל בסדר אהום ואם אני עושה האם הוא מפיל את התוכנה? או תודה רבהור properties deep coruption detected.

מצוין אנחנו יצאנו מגבולות יופי ככה. אז לשאלה שהייתה בסוגריים העגולות בעצם זה הגודל ש של א של זיכרון. אוקיי א מעניין מעניין משהו אחר מעניין משהו אחר אנחנו לפני זה הגדרנו את זה בצורה כזאת אה עכשיו זה עובד משום מעניין אוקיי אה דרך אגב תשימו לב אה אפועות אפועות אפות כן אה תשימו לב שאני אני בעצם מגדיר את הפינטר כיוניק pointטר ל אוקיי וכאשר אני מנסה להגדיר את הפוינטר הזה כפוינטר לטייפ אחר לא עכשיו הוא בעצם נותן לשגיעה ורשום פה א no opator שווה much this operant parent type pointer delete אוקיי, מה ש אומר ש אין לו overloading metod לשווה הזה שבעצם לוקח את הפ pointטר של in, אוקיי? ומקצה לו זיכרון ליוניק א למרחב של אר של אינט האם ברור מה שאמרתי הבנתם כן יופי כי לפעמים אני אה אה מתחיל להגיד משהו חצי מהמילים אני אומר אצלי בתוך הראש וכאילו התרגלתי התרגלתי לשול. יופי, סבבה.

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

שמתם לב מה קרה עכשיו? קרה דבר הבא כאשר אנחנו הגדרנו פינטר כרה שלינטים זה היה בעצם גודל של זיכרון שאנחנו הקצנו כאשר אנחנו עושים פינטר על in רגיל זה הפך לערך לערך שבעצם נשמר בפוינטר שלנו מעניין זה משהו אחר כך ניסית לשנות את הערך ל-88 בעצם אה הוא הדפיס 88 בסדר כן כן כן כן מעניין טוב על זה אני צריך לקרוא כי התנהגות קצת מוזרה לא ציפיתי לה בסדר גמור טוב בוא נתקדם בואו נתקר טו טוטוטוטום אה אוקיי רציתי להראות לכם עוד דוגמה שהבחנתי פה מראשוטו אוקיי ‏un ‏in pt שבה אה א טוט אסut שוב אנחנו עושים דבר הבא וואלה מחרתי לפני זה לא נורא סבבה עכשיו אנחנו עושים יני ptr ש אה רגע רגע רגע רגע קודם ככה נפק ‏F R is אוקיי אה טוטום מה הוא רושם לפה סבבה סבבה אם אני עושה זה ככה זה בעצם ערך אני מעביר ערך אבל הוא לא נותן לי פום פום פום טוב אה רגע מפ אוקיי מה אנחנו עושים מה אנחנו עושים אוקיי מצוין שהוא בודק אוקיי, מה קורה פה? מה אנחנו עשינו? א, כמו שאמרתי, א, כן, קצת טעיתי במה שאמרתי. אז א מצד אחד טעיתי, מצד אחד אה אמרתי את זה בצורה מאוד נכונה ומדויקת.

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

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

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

ויש לנו shרט pointנטר שבעצם הוא נותן לנו אפשרות להצביע על מרחב בזיכרון ובעצם אנחנו יכולים ליצור עוד פינטר גם smartטינטר כן ארפינטר שמצביע לאותו מקום בזיכרון אוקיי אז תנו לי כמה שניות ptr אחת make sure נו כלומר אם אני אסכם את זה היוק פוינטר הוא בעצם פוינטר חד פעמי השתמשת בו הוצאת ממנו את המידע הוא נמחק נכון נכון הוא נמחק בצורה אוטומטית זה זה מה ש מדהים בו כי לפעמים א רגע נגיע לזה פום רגע זה שתיים פה אתם זוכרים פה אני קיבלתי שגיעה כאשר עשיתי סתם ptr שווה לptr מי שזוכר תגידו כן מי שלא תגיד יופי ופה פתאום זה עובד זה בדיוק המהות של שרט פוינטרים אפשר א אפשר לשחק עם הכתובות מה שבא לכם עד הרמה מסוימת ‏P1 ‏V רק חשוב לציין משהו שגם אחרי הSTD מוב זה רק סמנטי בזיכרון זה אותו כתובת נשאר נכון מאוד זאת זאת בדיוק סימנטיקה של של השפה. זאת אומרת א א זאת בעצם העברת כתובת בצורה בטוחה. אוקיי. אוקיי. לגבי זה, לגבייש shרט פונטר, תסתכלו, ההתנהגות היא כמו בפוינטרים הרגילים שאנחנו אה כבר ראינו.

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

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

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

כן לא מכיר יוציא ויש לנו פה we pointטר יש פה משהו כמו badפ pointטר לא מכיר אותו אוקיי ptr ptrמי אוקיי, בסדר? עכשיו בוא ננסה לעשות אותן הדפסות כמו שעשינו לפני זה. א ריק כן הופה קיבלנו שגיעה רגע נגיע לזה פם פם פם קיבלנו שגיעה מה אומר לנו אומר לנו דבר הבא אז יש פה מזר אוקיי אה אה איך להסביר יותר נכון. ‏Poנטר הוא בעצם א הוא בעצם מגן על זה א ש א אנחנו נעשה א כמות אה אינסופית של א שרט פווינטרים. אוקיי?

ומה מיוחד בשרטינטר ששכחתי להגיד עד ששרט pointנטר האחרון לא יוצא בעצם מהסקופ אוקיי מהבלוק איפה שהוא מתבצא הזיכרון לא משוחררר זאת אומרת אם אנחנו יצרנו 100 שרפוינטרים עד שכל ה-100 לא יצאו מהסקו הזיכרון נשאר א זה מתבצע עם קולקט א לא קולקטור סליחה עםגב קולקטור א בפ+ספ+ס אפשר להגיד שכן זה מנגנון מאוד דומה אוקיי אה אפשר להגיד ש כן יש מנגנון של סוג של גבbage קולקטור בc+ספ+ס שהוא הוא בעצם אה עובר על כל ה אה פוינטרים ה סמרט פונטרים שיצאו בעצם מהסקופ ומשחרר להם את הזיכרון כן אוקיי אבל מה עם poינטר בשביל מה הוא מיועד אקפ pointינטר אומר דבר הבא א אני כמו שרד אוקיי אבל אתה יכול להשתמש בי רק כאשר אתה עושה. א כשר אתה עושה לוג בעצם. זאת אומרת עכשיו אני נסגר על מרחב זיכרון מסוים ואתה יכול לעבוד איתו. אוקיי? מראה לכם דוגמה יהיה קצת יותר ברור.

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

ל א למרחבון שפטר 1 מצביע עליו על 20. אוקיי, עכשיו אנחנו נעשה דבר הבא. רגע. כן עכשיו אנחנו נעשה דבר הבא שווה ל שיהיה 99 מספיק 88 פח ו2 איו ש אוקיי מריצים אנחנו מצפים לראות דבר הבא פה אנחנו מצפים לראות 20 ופה אנחנו מצפים לראות פעמיים 99 כמו שאמרתי 20 ופעמיים 99 אה אנחנו עוד נמשיך רגע יש לי פה משהו מעניין יש לו פה משהו מעניין אה צריך לשחרר את הלוק הזה זה או שלא קשר אה דרך דרך אגב, בואו נבדוק עוד משהו אם אנחנו כבר מדברים. מה קורה אם אתה מנסה עוד פעם לעשות לחסוק לזה?

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

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

אוקיי? הוא כל הזמן מחזיר מחזיר בעצם כתובת ל אותו אותו מקום בזיכרון. אוקיי א מה עוד א הבנתם מכירים מה זה סינגלטון תגידו כן אה יופי אני לא מכיר ולא כל כך הבנתי את המיוחדות של הויק פינטר כן א מה שקורה בעצם אתה יכול א לעשות דבר הבא אתה יכול להגדיר מקום בזיכרון איפשהו. אוקיי וא לדוגמה מקום בזיכרון א אם אנחנו מדברים כבר על מבדת איפה שמידה מסוים צריך להגיע א יש מנגנון כזה בצ'יפים מתקדמים א נקרא DMA direct memמרa או access אני לא זוכר משהו כזה אז זה בעצם מנגנון מסוים שהוא לוקח ממרחב זיכרון אחד ומעביר מידה למרחב זיכרון אחר. אוקיי?

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

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

חשבתי שהבנתי אותך ואז נזכרתי מה קרה בדוגמה שפיס בסוף הכל אותו דבר ואז זה היה הפוך ממה שהבנתי לגמרי איפה כספות כם כן כי בסוף אם הבנתי נכון מה שאמרת הוא נועל את המידע ואז אי אפשר לשנות את הסוג הזה של הפויינטר אבל כאילו כשאתה משנה את פוינטר שלו ל100 כולם משתנים ל-100 אז זה בדיוק הפוך ממה שאני הבנתי אוקי לא הבנתי נכון אני חושב שאני יכול להסביר את הנושא שלפינטר אז אז יש לך כאילו את השטפינטר הוא יש לו איזשהו ספירה פנימית כמה פעמים העצת אותו את אותו ממורי בזיכרון ואז אתה יוצא מהדברים אז הוא הוא סופר כמה פעמים מחקת את ה כמה שרד פוינטרים מחקת אם מחקת את כולם הוא מוחק את הזיכרון. אה זה הזה של הסמורט פינטר. הWפינטר זה כאילו מצביע לשדפינטר אבל בלי להעלות את הספירה. אז אה אה ואז אתה יכול לבדוק האם הוא עדיין מצביע לאותו מקום בזיכרון או לא. ואם הוא לא מצביע אז אתה כל פעם צריך לבדוק לפני זה.

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

גם אפשרי. רגע אני רוצה להראות משהו אקנט נכון משהו כזה כן אוקיי אז בעצם כשאני לוקח את הלוק על הויקינטר אני אפוקח אותו להיות שיתנהג בדיוק כמוט pointנטר אה לא כאשר את עושה הוא מגזיר לך בעצם את הרנס לשרט point כאילו יש בתוך אה א sharp pointטר coun בוא נגיד זה ככה ואם אני משתמש בוקפינטר כדי להתחיל את הפוינטר שלי אז הוא לא מעלה את הרco count אבל אם אני משתמש בלוק אז הוא כן מעלה את הרco cונט נכון או שלא נכון אה כן אבל עכשיו אנחנו נבדוק את זה אוקיי מה עשיתי פה רגע בוא אני קצת אפתח כן יופי מה עשיתי פה בעצם? אני מיצר את השareפינטר אוקיי ואני משתמש במתוד פנימי נגיד ככה של אובייקט הזה שנקרא use coun use coun מחזיר כמה פעמים אנחנו יצרנו את השרטפינטר למרחב הזיכרון הזה אוקיי אז מה שאנחנו אמורים לראות אה א לפחות פחות אני מקווה ועוד אנחנו אחרי זה נד נבדוק את הכתובת כתובת אמורה להיות אותה כתובת אוקיי א אנחנו אומרים לראות פה 1 1 1 1 1 1 משהו כזה בוא נראה עד כמה אני טועה אה אוקיי אוקיי אוקיי אוקיי 1 2 3 3 3 יופי יופי כן א שקורה קלוק הזה הוא כן מייצר את השרפוינטר אוקיי על מרחב א על מרחב הזיכרון הזה הוא כן מייצר ואנחנו יכולים לראות את זה ב א בשימוש של הפונקציה הזאת שאנחנו רואים שהקאונטר בעצם של השר פינטר עולה אוקיי, הוא כן מייצר פה את השטפנטר. ברור ומה אם היינו לא עושים לוק? מה קורה לנו?

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

הקומפילר מתייחס לזה כאילו לא צריך לעשות אופטימיזציות מסוימות או שלתורning כי הוא יודע שבראunטיים בעצם אנחנו נעביר לפה איזשהו ערך. אבל אם אנחנו עושים דבר הבא אם אנחנו מצפים לראות זה אחד הדברים למה אני לא אוהב להשתמש באוטו. אם אנחנו אומרים שאנחנו מצפים לקבל share פינטר אתם רואים פה עדיין הכל בסדר אבל אם אני עושה פה הוא אמור להחזיר לשגיעה למה כי אנחנו בעצם מקבלים reference על week pointטר ולא על shרט point כי הוא לא יכול להעלות את הרoנטר בתוך האobי של פינטר זה פשוט טיפים שונים הוא לא יכול לקבל טייפ שלפינטר לטיפ שלפינטר הבנתי אוקיי אבל עשינו פה משהו אחר כן עשיתי פה משהו אחר א עוד good prctti אף פעם אל תעשו דבר כזה כי זה מבלבל אוקיי מה שקורה פה פתר הוא אה ‏Poטר נכון אנחנו העברנו reference לפתר 3 כדי לקבל ממנו shar pointטר אני צריך לעשות קיבלתי shרפטר ועכשיו אני מעביר 100 לתוך מקום בזיכרון שהוא מצביע עליו אוקיי אבל כמו שאמרתי בסדר בשורה בשורה אחת זה פחות או יותר עוד אפשר להבין אבל אם א 50% מהקוד שלכם נראה בצורה כזאת אז זה נוראי. Don't do it. אה סבבה רציתי להראות עוד משהו את זה אנחנו ראינו.

זה דווקא אהבתי. אוקיי אוקיי אוקיי אוקיי. א עוד משהו א דמיינו לעצמכם שיש לנו אה שני שרט פווינטרים שאחד מצביע על שני אוקיי מה קורה א זה נראה נשפע כמו א כמו מה שיש א טוב אני מכיר את זה בס נשמע כמוסירular depפendcy בדיוק אחד מצביע על הראשון והשני מצביע על ה הבנת אותי אחד מצביע על השני ושני מצביע לראשון בדיוק כך בדיוק כך זה נקרא reference ובעצם פינטרים הם עוזרים לנו א לברוח מזה אוקיי אז אבל איך עכשיו אני כותב לך אוקיי, בואו קצת ניזכר בקלאסים short ptr מה? איפה תהיתי? אה, לא תיתי.

אוקיי זה בעצם אני יודע מה זה ואנחנו רוצים לעשותקטור ארזק ד משהו כזה אה רגע בוא נציף את זה ככה סבבה אט וצי את זה אוקיי עכשיו יש לנו א אוקיי מי ש מכיר ר פחות אז אנחנו יצרנו plus notד שמה שהוא עושה הוא מצביע על no אחר בעזרת shרט pointטר אוקיי והדבר הזה זה נקרא דסטרקטור כאשר אנחנו א כאשר אנחנו מייצרים קלאס בעצם אנחנו עושים הקצעה של הזיכרון אוקיי ו דסטרקטור הוא בעצם עוזר לנו לשחרר את הזק קרון הוא משהו משחרר את הזיכרון א יש דסטרקטורים דפולטים בטיפים רגילים סטנדרטים מה שנקרא וכאשר אתם מיצרים א קלאס משלכם אז אתם צריכים לממש את הדיסטרקטור אוקיי אה בום בום בום עכשיו אנחנו נעשה node noe אחד עכשיו זה ‏make short עשית אה הנה שניה חשבתי ש אדום אה נכון נכון נכון נכון? אוקיי, זה שרטפ אוקיי אותו דבר אנחנו עושים לנו שתיים, נכון? אוקיי. ומה שאני עושה עושה דבר הבא. עוד אחד א פום פום next שווה לנו 2 אוקיי וnote 2 next שווה לנו אוקיי יוסי אה מה קורה כאן בעצם אנחנו בדיוק בנינו את הסירקנס הזה א ואם אנחנו רגע יש לנו כאן יש לנו כאן אין לנו כאן למה אין לנו כאן in סבבה סבבה.

אוקיי, יופי. אנחנו בנינו reference משarט pointים. מה זה בעצם עושה לנו? אה, זאת אומרת, כאשר אנחנו יוצאים מהסקופ של פונקצית מי, אוקיי? הפוינטרים לא נמחקים.

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

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

יפה. ומה שאנחנו עשינו בנוד 1 אנחנו עשינו שהוא מצביע על Note 2 ו אנחנו עשינו שנד 2 מצביע על NO 1 אוקיי זאת אומרת אנחנו סגרנו אותם ב אפשר להגיד בלופ כזה של רפרנסים אוקיי ומסיבה הזאת בעצם אה הוא א הוא הגarbage colקטור אני אשתמש במילים האלהגבage colleקטור אה הוא רואה שבעצם יש לנו שני רפרנסים אוקיי אפום בוא נעשה דבר כזה 1 אdee 1 next useק א found שכ ‏L אוקי א עוד שרציתי להגיד כאשר אנחנו משחררים את הזיכר גרון אוקיי אז גבbage colקטור בעצם מפעיל את הדסטר של הקס זאת אומרת כאשר אנחנו משחררים את הזיכרון אנחנו אומרים לראות node distracted אוקיי יפה מצוין בואו נריץ עכשיו אני אקח לעצמי א בעצם א אחריות להריץ את זה אוקיי מה שאנחנו רואים שcטפטר שווה ל2 אוקיי והזיכרון הזה על שאני לא עושה ריבוט למחשב אין לי אפשרות א לעשות משהו עם הזיכרון הזה בגלל שאתה מימשת דסטרקטור אז הוא עשה overיט אה לא אה בגלל שאני משתמש בשר פינטר הוא עשה את ה א עשה עשה reference אוקיי זאת אומרת א כמות השרט פונטרים לא קטן אף פעם וגבקטור לא משחרר את הזיכרון אוקיי עכשיו אנחנו נעשה משהו אחר אנחנו א נשנה קצת את הקלאס שלנו אה אהום כן אנחנו נעשה דבר אבא ויק ויק ויק ככה ויק אוקיי אנחנו שנינו רק את הסוג של הפוינטר שבעצם אה אה אנחנו מצביעים בעזרתו. אוקיי, ותראו מה יקרה עכשיו. בום. אז מה שהוא עושה?

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

א כן כן. Poינטר אמור לא שלעזור בזה, פשוט לא לא לתת לנו בכלל את האפשרות הזאת לעשות את הסירקular. יופי א טוטוטו א נשחק קצת עם דינam ray כן אבל מה היה קורה אם היה לי פונקציה בתוך הנוד הזה שלא יודע מה רוצה להשתמש בפוינטר או משהו בסגנון? באיזה פווינטר? בוא נרשום ביחד שומה משתמשת בויקינטר לעשות משהו לא יודע כי הרי אתה צריך להשתמש בלוק הזה ואז יעלה לך את הספירה או משהו נראה לי בוא ננסה ‏Eh ר וואי, אף פעם אני לא זוכר את זה לכל הבחות.

א אתה לא יכול נראה לי להשתמש במילה do כי זה תפוס משהו אחר או תודה רבה אה נכון do ו כבר שעה מאוחרת נו next ואנחנו מגזירים משהו כזה אה נת הוא יצור פינטר ואז הוא ידוק את השטפינטר אז הוא יעלה ויוריד כן הבנתי יופי א פפום בוא בוא נסיים את זה אז א בוא נסיים את זה אז אז אה בעצם אנחנו נקבל אותו דבר מה ש מה שהיה פה עם הבעיה כרגע מקבל בעיה כי בשר פנט לא מה מקבל כרגע יהיה לך איזשהו בעיה כי אתה עוד פעם משתמש בשרד פינטר לא נכון נכון אני שוב אראה את שתיים הזה שפעמיים בעצם אני השתמשתי בשרט פונטר ואנחנו נראה שהדיסטרקטור בעצם לא נקרא כי אנחנו לא משחררים את הזיכרון אוקיי אוי סבבה זה אנחנו ציפינו א פוקפום אם אנחנו ננסה בדיסטרקטור להשתמש ‏out eh countזה פחות או תודה רבה [כחכוח] קבל אתם כקבל תקבל איזה אפס או משהו איזה תגיעה אני לא יודע בוא נראה אתם רואים מה שקורה לפני שאנחנו שחררנו את הזיכרון אה אנחנו קיבלנו שיש לנו בעצם רפרנס אחת. אוקיי? ושחררנו את הזיכרון שלו. אה, ופעם שנייה אנחנו ראינו שיש לנו אה רגע, זה כנראה ספירה מאפס. אה, אנחנו רואים שאנחנו משחררים את הnode 2.

רגע, אולי להוסיף שמות. בוא נוסיף שמות בוא נוסיף שומות נעשה פה נעשה פה א נגיד ככה nam אוקיי נעשה פה א noנ ש אוקיי ספנו שמות עכשיו אני אגנד א משהו כזה זה סבבה אה טו טוטוטוטו טוטו מאוד אה רגע אני בודק אה מה עוד אחד נותן לי נותן לי מה עוד שתיים פה נריץ. אוקיי, מה שעשינו אנחנו אה אנחנו רואים דבר הבא. דבר הבא פה בעצם אני מייצר את האoby nood לקונסטרקטור א לקונסטרקטור שלו. אני נותן לו שם.

אוקיי? אחד נקרא עוד אחד. שני נקרא 2.2. אוקיי? וכאשר אנחנו א יוצאים מהסקופ א וקורה בעצם שחרור של הזיכרון, אנחנו רואים דבר הבא.

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

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

אה זהו, תודה רבה. א אני מקווה שאהבתם את ההסבר שלי. א אם לא אהבתם אני מקווה שתאהבו. א שוב עבר עברה תקופה בכל זאת וקצת צריך להוריד את החלודה א אני רוצה לראות אתכם א בשיעור הבא יהיה מעניין אני מבטיח תודה אה אפשר להגיד רגע משהו בהלט אני פחות יותר רק עקבתי אחריך ורשמתי את הדברים פה באצלי אצלי הוא קיבל איזשהיא שגיעה איפה ש שכאילו א משהו עם ה עם ההגדרה של הנode 1 בn 2 כאילו ב בהמשך שרשמת במקשד יש שמה איזה שגיעה אצלי אני יכול לעשות שרסקרין להראות את זה אני לא יודע למה כאילו עשה את זה תעשה תעשה בט אה אני לא יכול לעשות א רגע עכשיו עכשיו שלחתי איזה בקשה לשא ש יש תעשה יש אוקיי אוקיי רואים את המסך שני א עוד לא עכשיו רואים כן אוקיי אז אצלי פשוט כאילוני רגע אני אנסה להגדיל את אני רואה. אתה רואה את הבעיה?

כן. חברים, מי יכול להגיד מה הבעיה? הוא לא הגדיר קונטרקטור נכון מיכל? בקלאס עצמו אתה צריך להגדיר קונסטקטור לקס לכן אז אתה אה אתה רושם node פשוט כן כמו שם של הקלאס בסוגריים אתה רושם שהוא מקבל strטריing name ובתוך הקונסטרקטור אתה רושם שני שווה לפרמטר שלך אה רק לא רשמת את השם של הפרמטר, רשמת רק טייפ שהוא סטרינ לא לא לא לא בתוך הסוגריים אה אוקיינ לדוגמה name יפה ובתוך הקונסטרקטור אתה רושם name שווה לname סוגר מסו לא לא לא אוקיי שני נקודה פסיק סיימת אה אוקי הייתי נותן ל הייתי קורא לזה ני name משהו שיהיה הבדל בין ה אה הוא בצורה אוטומטית אמור לתפוס את אה אורפס את זה. אוקיי.

בוא תריז. רגע. כן. אה בסדר. רגע אני אביא את זה לפה.

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

יש שפות שבעצם באופן יזום אתה צריך לרשום thisס כדי שהוא יתייחס ובדרך כלל כאילו בשפות מודרניות הוא יודע בצורה אוטומטית הקומפי אני מתכוון שכאילו אתה מתייחס פה לדיס ופה ל אמטר אוקיי טוב תודה בבילה מיכאל היה מרתק תודה תודה רבה קבלו את ההקלטה תעברו על החומר חשוב זה ה יופי תעשו שורי בית מה שורי בית אני אשלח אל תדע אה אוקיי סבבה יש בסוף תעודה שכתוב כמה חוסרים וכמה [‏צחוק] שורי בית כן בסדר יופי נפגשים ב אני מחכה לפתק מיום ראשון למה לא הגעת מההורים טוב, תודה מיכל. תודה חבר'ה. ביי. לילה טוב. תודה רבה.

תודה. ביי. ביי ביי.