Первый комментарий: пока вы указываете нетривиальный деструктор и, что еще важнее, назначение копирования, вам также необходимо указать конструктор копирования.
Далее оператор копирования должен вернуть ссылка на *this
: это позволяет вам использовать цепочку следующим образом: 'a = b = c;'
Копирование-назначение может выглядеть так:
CString& operator =(const CString& obj) {
delete[] c;
length = obj.length;
c = new char[length + 1];
for (int i = 0; i <= length; i++) { c[i] = obj.c[i]; }
return *this;
}
Однако, Принимая во внимание мой первый комментарий, вы можете выполнить копирование только один раз:
CString(const CString& obj) {
length = obj.length;
c = new char[length + 1];
for (int i = 0; i <= length; i++) { c[i] = obj.c[i]; }
}
CString& operator =(const CString& obj) {
CString tmp(obj)
swap(length, tmp.length);
swap(c, tmp.c);
return *this;
}
Кроме того, ваш конструктор CString(int leng, char* payload)
выглядит подозрительно. Вы понимаете, что строка c должна быть выделена с new
(и будет удалена в деструкторе)?