Рассмотрим очень простой класс строк string:
struct string {
char* p;
int size; // размер вектора, на который указывает p
string(int sz) { p = new char[size=sz]; }
Возможно вы искали - Статья: Класс Строка
~string() { delete p; }
};
Строка - это структура данных, состоящая из вектора символов и длины этого вектора. Вектор создается конструктором и уничтожается деструктором. Однако это может привести к неприятностям.
Например:
void f()
Похожий материал - Статья: Запись и считывание данных (работа с файлами)
{
string s1(10);
string s2(20);
s1 = s2;
}
Очень интересно - Статья: Работа с регионами в Visual C++
будет размещать два вектора символов, а присваивание s1=s2 будет портить указатель на один из них и дублировать другой. На выходе из f() для s1 и s2 будет вызываться деструктор и уничтожать один и тот же вектор с непредсказуемо разрушительными последствиями. Решение этой проблемы состоит в том, чтобы соответствующим образом определить присваивание объектов типа string:
struct string {
char* p;
int size; // размер вектора, на который указывает p
string(int sz) { p = new char[size=sz]; }
Вам будет интересно - Статья: Как написать AJAX-приложение
~string() { delete p; }
void operator=(string&)
};
void string::operator=(string& a)
{
Похожий материал - Реферат: Администрирование SQL Server 2000
if (this == &a) return; // остерегаться s=s;
delete p;
p=new char[size=a.size];
strcpy(p,a.p);