13.01.2015 Views

Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

}<br />

102<br />

VMatrix second (M, 5); // инициализируем з<strong>на</strong>чением 5<br />

second.Out (); // 6,7,8, 9,10,11, 12,13,14<br />

Процесс освобождения памяти после уничтожения объектов можно сопровождать<br />

деструктором (destructor) – бестиповым открытым методом без<br />

параметров, имя которого совпадает с именем класса и имеет префикс ~<br />

(тильда). Деструктор всегда вызывается автоматически, то есть неявно, при<br />

выходе из блока, в котором был объявлен объект. Он также включается при<br />

вызове оператора delete для указателя <strong>на</strong> объект, имеющий деструктор, или в<br />

том случае, когда необходимо удалить объект, вложенный в удаляемый. В<br />

любом случае работа деструктора сопровождает процесс освобождения памяти,<br />

выделенной конструктором. Каждый класс имеет только один деструктор,<br />

причем всегда открытый и без параметров. За работой деструктора можно<br />

по<strong>на</strong>блюдать в следующем примере:<br />

class VPair {<br />

int first, second;<br />

public:<br />

VPair (int one, int two): first (one), second (two)<br />

{ ShowMessage ("Объект создан"); }<br />

~VPair () { ShowMessage ("Объект удален"); }<br />

void Out () { ShowMessage (AnsiString (first) + '\n' + AnsiString (second)); }<br />

};<br />

void MainVPair () {<br />

{ VPair num (2,3); // объект создан<br />

num.Out (); // 2-3<br />

} // объект удален<br />

{ VPair num (4,5); // объект создан<br />

num.Out (); // 4-5<br />

} // объект удален<br />

}<br />

За освобождением памяти можно <strong>на</strong>блюдать и без деструктора. В приведенной<br />

ниже реализации объектов str, поочередно помещаемых в стек и<br />

очередь, деструктора нет:<br />

class VStackAndQueue {<br />

char *s;<br />

int i, size, top;<br />

AnsiString result;<br />

public:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!