Переопределение операции присваивания
При отсутствии переопределения операции присваивания производится побайтное копирование объектов. Такая интерпретация операции присваивания некорректна, если объект имеет указатели на динамические переменные или массивы, идентификаторы связанных ресурсов и т.д.. При копировании таких объектов необходимо сначала уничтожить связанные динамические переменные и ресурсы левого операнда, а затем заново резервировать, но уже с параметрами, необходимыми для интерпретации операции присваивания:
//------------------------------------------------------bk73-10.cpp
//------Переопределение операции присваивания
class string // При переопределении операции
{ // присваивания для класса строк
char *Str; // необходимо сначала освободить
int size; // динамический массив, содержании
public: // строку в левом операнде
string &operator =(string&);
};
string &string::operator=(string& right)
{
if (Str !=NULL) delete Str; // Освободить динамическую
// память левого операнда
size = Str.right.size; // Резервировать память под
Str = new char[size]; // размер строки правого
strcpy(Str,right->Str); // Копировать строки
}