ВУЗ:
Составители:
Рубрика:
101
типа из области существования этого указателя не приводит к вызову
деструктора для объекта, на который он указывает. Надо различать ука-
затели на объект, созданные при помощи операции new, и другие объ-
екты.
Рассмотрим пример с указателем на автоматический объект абст-
рактного типа:
class cl{int num;
public:
cl (int i){ num = i;}
~cl (){}
};
void main (){
// Создание объекта obj типа cl:
cl obj (1);
// Создание указателя ptr на объект класса cl и его инициализация
// адресом, создаваемой здесь же безымянной переменной типа cl:
cl *ptr = &cl (2);
{// Указатель в блоке относится к тому же объекту, что и ptr.
cl *tmp = ptr;
}
}
В этом случае как конструктор, так и деструктор будут вызывать-
ся дважды. Сначала вызывается конструктор для объекта obj, затем кон-
структор для безымянного объекта, на который указывает ptr. При вы-
ходе из внутреннего блока указатель tmp теряется, однако сам объект
сохраняется. При завершении main () в первую очередь вызывается де-
структор для безымянного объекта, а затем – деструктор для obj.
Если указатель относится к объекту абстрактного типа, созданно-
му динамически, то деструктор для него вызывается в операции delete:
class cl{int num;
public:
cl (int i){num = i;}
~cl (){cout<<”Деструктор класса cl. \n ”;
};
void main (){
cl *ptr = new cl (1);
…
delete ptr;}
Страницы
- « первая
- ‹ предыдущая
- …
- 97
- 98
- 99
- 100
- 101
- …
- следующая ›
- последняя »
