Конструктор выделяет оперативную память для объекта класса и инициализирует его свойства. Он вызывается автоматически при создании объекта класса. Если при разработке структуры класса конструктор не был явно задан, то компилятор предоставляет конструктор по умолчанию. Конструктор по умолчанию предназначен только для выделения оперативной памяти для хранения свойств и методов класса. Для каждого объекта класса создается отдельная копия свойств. Методы класса не тиражируются.
Для конструкторов существует несколько важных правил:
· имя конструктора совпадает с именем его класса;
· конструктор не имеет никакого возвращаемого значения (дажеvoid);
· если конструктор описан явно, то конструктор по умолчанию не генерируется;
· конструктор не наследуется.
Деструктор вызывается автоматически, если объекты классов становятся недействительными (например, при выходе за область определения или при вызове оператораdelete для указателя на объект класса). Деструктор уничтожает объект и освобождает занимаемую им оперативную память.
Правила для деструктора аналогичны правилам для конструктора:
· имя деструктора также совпадает с именем его класса, но предваряется символом «~» (тильдой):
~имя_класса();
· деструктор не имеет никакого возвращаемого значения (даже void);
· деструктор не имеет параметров;
· если в классе деструктор явно не описан, то компилятор генерирует деструктор по умолчанию;
· деструктор не наследуется (помечает память, занятую свойствами класса, как свободную).
Деструктор обязательно должен быть явно задан в классе, если в конструкторе используются операторы динамического выделения памяти (new и delete). Если этого не сделать, то память, занимаемая объектом, при его уничтожении не будет помечена как свободная.