Чуєте, я, взагалі, дуже боюся цієї теми, ну конструктора копіювання, тому що не зовсім розумію, що це, і навіщо воно.  Саме тому я досі не почав нічого писати на цю тему. 
▼Прихований текст
Але я впевнений, що з вашою допомогою мені все стане зрозуміло, і я переможу конструктор копіювання! 
Тому що ніхто і ніщо не запихне мені розуміння прямо в мозок, якщо я сам не буду того бажати, якщо я не відкрию свій мозок для нових знань! ліл, і тут в мене потекла сльоза
Ось цей код виводить дві однакові стрічки. 
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 обох класів має однакову адресу, але ні, адреси різні.
Тоді, що ж коється при 
???
Подивився інфу в інетах, ще більше заплутався, купа якихось конструкторів, якісь ще &&, а що, а навіщо, просто срака якась.