../images/Emo26.gif הטענה שלי עדיין עומדת!
שים לב בd'tor אתה מוחק את המחרוזת. דבר שהוא נכון לעשות. אבל, כשאתה סומך על הקומפיילר שיעתיק לך אובייקט אז אתה צריך לזכור שיש לו מגבלות. למה אני מתכוון? ה str שלנו הוא char*. כלומר מצביע. הקומפיילר לא יעתיק לך את המחרוזת, אלא הוא יעתיק לך את הערך של המצביע. ולכן, האובייקט tmp שנוצר לך בתוך GetOne מקבל איזשהו ערך ו str מתאים (עד כאן הכל בסדר). במשפט הreturn נותר אובייקט נוסף באמצעות בנאי-מעתיק שהקומפיילר ייצר בשבילך. הבנאי-מעתיק הזה פשוט מעתיק את הערכים מtmp הנ"ל, ובאופן ספציפי עבור str. כלומר ה str שבאובייקט שמוזר יצביע על אותו מקום שעליו הצביע tmp. אבל, tmp נמחק כשהפונקציה GetOne מסתיימת, ומתבצע delete [] str... אני מניח שמכאן הכל ברור לך. אם לא, תנסה לבטל את הdelete בd'tor, או שתקצה את tmp בתוך GetOne דינאמית. או שיותר פשוט, תשים break point ותראה הערך של str בכל שלושת האובייקטים שנוצרים (tmp בתוך GetOne, אובייקט נוסף בreturn, והאובייקט שמשמאל לפעולת "=" ב main) זהה.