Программирование на С++. Рейзлин В.И. - 9 стр.

UptoLike

Составители: 

10
при выходе из блока, когда уже объект перестает существовать,
выделенная для него память была возвращена. Желательно, чтобы освобо-
ждение памяти происходило автоматически. Такую возможность обеспе-
чивает специальный компонент класса деструктор класса. Его формат:
~имя_класса(){операторы_тела_деструктора}
Имя деструктора совпадает с именем его класса, но предваряется
символом “~” (тильда).
Деструктор не имеет параметров и возвращаемого значения. Вызов
деструктора выполняется не явно (автоматически), как только объект клас-
са уничтожается.
Например, при выходе за область определения или при вызове опе-
ратора delete для указателя на объект.
string *p=new string “строка”);
delete p;
Если в классе деструктор не определен явно, то компилятор генери-
рует деструктор по умолчанию, который просто освобождает память, заня-
тую данными объекта. В тех случаях, когда требуется выполнить освобож-
дение и других объектов памяти, например область, на которую указывает
ch в объекте string, необходимо определить деструктор явно:
~string(){delete []ch;}
Так же, как и для конструктора, не может быть определен указатель
на деструктор.
Указатели на компоненты-функции
Можно определить указатель на компоненты-функции.
тип_возвр_значения(имя_класса::*имя_указателя_на_функцию)
(специф_параметров_функции);
Пример.
double(complex : :*ptcom)(); // Определение указателя
ptcom = &complex : : real; // Настройка указателя
// Теперь для объекта А можно вызвать его функцию
complex A(5.2,2.7);
cout<<(A.*ptcom)();
Можно определить также тип указателя на функцию
typedef double&(complex::*PF)();
а затем определить и сам указатель
PF ptcom=&complex::real;