Введение в язык Си++


Конструкторы и Деструкторы




Если у класса есть конструктор, то он вызывается всегда, когда создается объект класса. Если у класса есть деструктор, то он вызывается всегда, когда объект класса уничтожается. Объекты могут создаваться как:

[1] Автоматический объект: создается каждый раз, когда его описание встречается при выполнении программы, и уничтожается каждый раз при выходе из блока, в котором оно появилось;

[2] Статический объект: создается один раз, при запуске программы, и уничтожается один раз, при ее завершении;

[3] Объект в свободной памяти: создается с помощью операции new и уничтожается с помощью операции delete;

[4] Объект член: как объект другого класса или как элемент вектора.

Объект также может быть сконструирован с помощью явного применения конструктора в выражении (см. #6.4), в этом случае он является автоматическим объектом. В следующих подразделах предполагается, что объекты принадлежат классу, имеющему конструктор и деструктор. Примером может служит класс table из #5.3.


Для некоторых производных классов нужны конструкторы. Если у базового класса есть конструктор, он должен вызываться, и если для этого конструктора нужны параметры, их надо предоставить. Например:

class base { // ... public: base(char* n, short t); ~base(); };

class derived : public base { base m; public: derived(char* n); ~derived(); };

Параметры конструктора базового класса специфицируются в определении конструктора производного класса. В этом смысле базовый класс работает точно также, как неименованный член производного класса (см. ). Например:

derived::derived(char* n) : (n,10), m("member",123) { // ... }

Объекты класса конструируются снизу вверх: сначала базовый, потом члены, а потом сам производный класс. Уничтожаются они в обратном порядке: сначала сам производный класс, потом члены а потом базовый.



Содержание раздела