Чуєте, я, взагалі, дуже боюся цієї теми, ну конструктора копіювання, тому що не зовсім розумію, що це, і навіщо воно. Саме тому я досі не почав нічого писати на цю тему.
▼Прихований текст
Але я впевнений, що з вашою допомогою мені все стане зрозуміло, і я переможу конструктор копіювання!
Тому що ніхто і ніщо не запихне мені розуміння прямо в мозок, якщо я сам не буду того бажати, якщо я не відкрию свій мозок для нових знань! ліл, і тут в мене потекла сльоза
Ось цей код виводить дві однакові стрічки.
MyString mys = "abcdabe";
std::cout << mys << std::endl;
MyString mys1 = mys;
std::cout << mys1 << std::endl;
Як я розумію, конструктор копіювання має створювати новий об'єкт, з такими самими значеннями змінних, але вже в іншому адресному полі. Тобто змінні нового об'єкту не мають містити посилання на змінні старого об'єкту.
Тоді поясніть мені, що відбувається в цій стрічці?
Можливо, тоді стане зрозуміло, чому, коли я намагаюсь закрити консольку, в мене вилазить ось це
взагалі я вже бачив щось подібне, тому можу припустити, що йде намагання звільнити вже звільнену пам'ять.
UPD: я не втримався, і перевірив, змінив деструктор
MyString::~MyString()
{
std::cout << "deleting at: "<< str << std::endl;
delete[] str; //очищуємо місце, котре виділялось під оті ваші стрічки
}
І от, що ми бачимо
UPD2: Я трохи не так змінив деструктор, адже хтів перевірити, чи змінна str обох класів має однакову адресу, але ні, адреси різні.
Тоді, що ж коється при
???
Подивився інфу в інетах, ще більше заплутався, купа якихось конструкторів, якісь ще &&, а що, а навіщо, просто срака якась.