Во-первых, myString g = s;
- это инициализация нового myString
, и это делается с помощью конструктора копирования (который предоставляется автоматически, потому что вы его не написали).
Ошибка ссылки из-за строки cout << this << endl;
, так как вы не сказали системе, как печатать this
, и она, очевидно, не может найти способ.
В C ++ есть правило трех: если вы пишете конструктор копирования, оператор присваивания или деструктор, вам, вероятно, нужно написать все три. (Исключением является написание виртуального деструктора для базового класса.) Как правило, тогда ваш класс управляет каким-либо ресурсом (str
в вашем случае), и вам нужно обрабатывать его во всех трех случаях.
Кроме того, используйте const
, когда можете. Вы можете передать не const
переменную в const
ссылку, но не наоборот.
Твой деструктор в порядке. Ваш оператор присваивания должен иметь подпись myString & operator=(const &myString)
, а ваш конструктор копирования должен иметь подпись myString::myString(const &myString)
.