Конструкторы и Деструкторы
Если у класса есть конструктор, то он вызывается всегда, когда создается объект класса. Если у класса есть деструктор, то он вызывается всегда, когда объект класса уничтожается. Объекты могут создаваться как:
[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) { // ... }
Объекты класса конструируются снизу вверх: сначала базовый, потом члены, а потом сам производный класс. Уничтожаются они в обратном порядке: сначала сам производный класс, потом члены а потом базовый.