в BufferArray :: operator +, tempCharArray - это временный буфер, который будет уничтожен после завершения функции.Существуют два основных способа решения этой проблемы:
1 / выделение временного буфера с помощью new [] в operator +, таким образом вы будете уверены, что буфер выдержит вызов оператора operator +, но у вас либо будет памятьутечь или потребовать, чтобы вызывающая сторона позже вызывала delete [], что довольно неуклюже и подвержено ошибкам
2 / или еще лучше, измените setBuffer, чтобы он делал внутреннюю копию буфера, и добавьте вызов для удаления[] в вашем собственном деструкторе:
BufferArray::~BufferArray() {
delete[] buffer;
}
void BufferArray::setBuffer(char *otherBuffer) {
buffer = new char[strlen(otherBuffer) + 1];
strcpy(buffer, otherBuffer);
}
Обратите внимание, что вам придется изменить конструктор, чтобы он также копировал входной буфер (иначе у вас будет недопустимый вызов delete [], когда объектуничтожен), а затем вы можете захотеть перегрузить конструктор копирования и оператор присваивания, чтобы предотвратить мелкое копирование, что приведет к двойному удалению буфера.
В реальном производственном коде вы захотите использовать управляемыйкакой-то указатель, чтобы не выполнять удаление самостоятельно (например, std :: vector или boost :: shared_array), но для домашней работы вышеприведенное решение должно подойти.
На заметку, не забудьте добавить +1 при использовании strlen для определения размера вашего буфера;)