Язык С++ и программирование на нем. Рейзлин В.И. - 100 стр.

UptoLike

Составители: 

102
Перед удалением из памяти объекта, на который указывает ptr,
для него будет вызван деструктор. В результате на экране появится
строка
деструктор класса cl.
Вызов деструктора можно осуществить явно по его полному име-
ни:
class cl{int num;
public:
cl (int i){
num = i;}
~cl(){}
};
void main(){cl obj (1);
cl *ptr = &cl (2);
obj.cl::~cl ();
ptr -> cl::~cl ();
}
Также можно вызвать деструктор и для динамического объекта.
cl *ptr = new cl (1);
ptr -> cl::~cl ();
Отмети, что явный вызов деструктора не отменяет его автомати-
ческий вызов.
class X{ int *ip;
public:
X (int y){ip = new int(y);}
~X(){cout <<"Деструктор класса X;\n";
delete ip;}
};
void main(){ X *xp = new X(5);
xp->X::~X(); // Явный вызов деструктора.
delete xp; // Вызов деструктора из delete.
}
В результате получим два сообщения, если не произойдёт зацик-
ливания при повторной операции delete, применённой к одному и тому
же указателю ip: