346 Часть II. Программирование на C++
ным-членам класса, то есть тому, что в конце концов надо инициализировать.
Требований к вам как творцу конструкторов немного: вы вынуждены учитывать, что конструктор вызывается неявно, что он не имеет возвращаемого значения и что его имя в точности должно совпадать с именем его класса. Многие детали объявлений конструкторов, включая имя и возвращаемое значение, не в вашей власти.
Деструкторы
Деструкторы выполняют работу, обратную той, что проделывают конструкторы. Хотя класс может иметь несколько конструкторов, но деструктор может быть только один.
Синтаксис деструктора очень похож на синтаксис конструктора по умолчанию. Точно также деструктор не имеет аргументов; все различие заключается в том, что деструктор, будучи по своей сути функцией, парной конструктору, имеет то же имя, что и класс, но с приставкой в виде операции дополнения (~). То есть деструктор любого класса имеет такую форму:
class ANY
{
public:
ANY(); // конструктор по умолчанию ~ANY(); // деструктор; может быть только единственным
};
Деструктор почти всегда вызывается неявно; этот вызов происходит либо при выходе объекта за пределы своей области видимости, либо при уничтожении динамического объекта операцией delete.
Виртуальный деструктор. Если класс может иметь наследников, то предпочтительнее использовать виртуальный деструктор. Синтаксис виртуального деструктора точно такой же, как и у любого другого деструктора, за исключением того, что его объявление начинается с ключевого слова
virtual.
class ANY
(
public:
ANY(); // конструктор по умолчанию
virtual ~ANY(); // виртуальный деструктор };
Объявление деструктора виртуальным не отразится на производительности, так что имеет смысл всегда делать его виртуальным, если нет очень веских причин воздержаться от этого. Отказ от применения виртуальных деструк-