24 Понятия конструкторов
и деструкторов.
Это спец. ф-ции, кот.опред. каким образомобъекты класса созд., иниц. или разруш.
class X{int n;
X();конструктор
~X();//деструктор}
Констр-р - метод, вызываемый при создании класса. Деструктор - при уничтожении.
X::X(){new int[100];}
X::~X(){delete n;}
1) Констр-р и дестр. не им. объявл. знач-й возврата
2)не м.б. унаследованы; хотя произв. классы д. вызв. констр-ры и дестр-ры баз. класса
3)дестр. м. им. атрибут virtual, констр. - нет.
4)нельзя работать с адр. констр. и дестр.
class X;
void *ptr=(void*)X::X();// нельзя
Если конструктор и дестр. не были
определены явно, то они генер. С++. Они также м.б. запущены при отсутствии явного
вызова в проге. Каждый К или
Д, созданный конст. будет public.
X a;
a::X();//нельзя вызвать явно
a::~X();//нельзя вызвать явно
a.X();// правильно
a.~X();// правильно
При опр. или разруш. объектов компилятор вып-ет вызов К и Д автоматически. Конструктор опред-ся при созд-и лок. и врем. объектов, дестр-р - когда объект выз. из обл. действия.
Констр-р глоб. пер. вызыв-ся до точки у к-рой - в мал. созд.
f(Cstring
String);
f(Cstring, csstr("file.bmp"));
Парам. К м.б. любого типа, кроме класса, Эл-м к-рого явл-ся данный конструктор. К м. принимать в кач-ве параметра ссылку на свой класс (К копирования)
class X{int a; X(){}; X(int b){a=b;}X x(10),}
Деструкторы
Вызыв. для освобожд-я Эл-в до разруш-я самого объекта. Вызов Д вып-сянеявно, когда переем. выходят из своей объявленной области. Для глоб переем-х Д вызыв. после вызода из ф-и main. Когда указ-km объекта выходит за пределы обл. действия, вызов Д не происходит. Для разрушения такого объекта опер-я delete д.б. задана явно. Д вызыв. в обратной вызову конструкторов последовательности.
f(){X *pX.new X; delete pX;}
При заверш-и прогр. exit Д м. вызываться даже для глоб. перем.