Составители:
Рубрика:
Если программист не указал ни одного конструктора копирования, компилятор
создает его автоматически. Такой конструктор выполняет поэлементное копирование
полей. Если класс содержит указатели или ссылки, это, скорее всего, будет неправиль-
ным, поскольку и копия, и оригинал будут указывать на одну и ту же область памяти.
Деструктор - это специальная функция-член класса, которая используется для ос-
вобождения членов или объектов класса до их уничтожения. Имя деструктора - имя
класса, которому предшествует символ ~ :
class X
{
public:
~Х(); // деструктор класса Х
};
Деструктор не имеет параметров. Для него не указывается тип результата. Если де-
структор не описывается явно, то он создается компилятором. Деструктор вызывается,
когда соответствующая переменная удаляется из памяти. Для локальных переменных
деструктор вызывается в конце соответствующего блока, для глобальных переменных -
как часть процедуры exit после main.
Когда удаляется указатель на объект, то деструктор автоматически не вызывается.
Это означает, что для уничтожения объекта должна использоваться операция delete. Де-
структоры вызываются в порядке, обратном порядку вызова конструкторов. Когда внут-
ри программы используется функция exit, то деструкторы для локальных переменных не
вызываются. Глобальные переменные освобождаются в обычном порядке. Если внутри
программы вызывается функция abort, то не исполняются никакие деструкторы - ни для
глобальных, ни для локальных переменных.
Деструктор может быть вызван одним из двух способов: косвенно, посредством
операции delete и непосредственно, путем указания полного имени деструктора. Опера-
ция delete используется для уничтожения объектов, созданных с помощью операции
new. Если объект создан каким-либо другим образом, то используется явный вызов де-
структора. Деструктор может быть объявлен как виртуальный. Это позволяет, используя
указатель объекта базового класса, вызвать правильный деструктор, если в текущий мо-
мент деструктор ссылается на объект порожденного класса.
Реализуем пример класса Name, рассмотренный выше, с использованием конструк-
торов и деструкторов. Для этого будем в конструкторе класса выделять память под все
поля, а деструкторе освобождать.
#include <iostream.h>
#include <conio.h>
class Name
{
char *fam;
char *name;
public:
void NamePrint();
void NameInput();
Name();
~Name();
};
Name::Name()
{
fam=new char[10];
91
Если программист не указал ни одного конструктора копирования, компилятор
создает его автоматически. Такой конструктор выполняет поэлементное копирование
полей. Если класс содержит указатели или ссылки, это, скорее всего, будет неправиль-
ным, поскольку и копия, и оригинал будут указывать на одну и ту же область памяти.
Деструктор - это специальная функция-член класса, которая используется для ос-
вобождения членов или объектов класса до их уничтожения. Имя деструктора - имя
класса, которому предшествует символ ~ :
class X
{
public:
~Х(); // деструктор класса Х
};
Деструктор не имеет параметров. Для него не указывается тип результата. Если де-
структор не описывается явно, то он создается компилятором. Деструктор вызывается,
когда соответствующая переменная удаляется из памяти. Для локальных переменных
деструктор вызывается в конце соответствующего блока, для глобальных переменных -
как часть процедуры exit после main.
Когда удаляется указатель на объект, то деструктор автоматически не вызывается.
Это означает, что для уничтожения объекта должна использоваться операция delete. Де-
структоры вызываются в порядке, обратном порядку вызова конструкторов. Когда внут-
ри программы используется функция exit, то деструкторы для локальных переменных не
вызываются. Глобальные переменные освобождаются в обычном порядке. Если внутри
программы вызывается функция abort, то не исполняются никакие деструкторы - ни для
глобальных, ни для локальных переменных.
Деструктор может быть вызван одним из двух способов: косвенно, посредством
операции delete и непосредственно, путем указания полного имени деструктора. Опера-
ция delete используется для уничтожения объектов, созданных с помощью операции
new. Если объект создан каким-либо другим образом, то используется явный вызов де-
структора. Деструктор может быть объявлен как виртуальный. Это позволяет, используя
указатель объекта базового класса, вызвать правильный деструктор, если в текущий мо-
мент деструктор ссылается на объект порожденного класса.
Реализуем пример класса Name, рассмотренный выше, с использованием конструк-
торов и деструкторов. Для этого будем в конструкторе класса выделять память под все
поля, а деструкторе освобождать.
#include
#include
class Name
{
char *fam;
char *name;
public:
void NamePrint();
void NameInput();
Name();
~Name();
};
Name::Name()
{
fam=new char[10];
91
Страницы
- « первая
- ‹ предыдущая
- …
- 89
- 90
- 91
- 92
- 93
- …
- следующая ›
- последняя »
