ВУЗ:
Составители:
Рубрика:
21
{ Для объектов t1 и t2 вызываются методы Square и Perimeter.
Возвращаемые ими действительные значения выводятся на экран. }
t1.Destroy; t2.Destroy; // объекты удаляются из памяти
ReadLn;
end.
Приведенный код содержит одну новую операцию: удаление объ -
екта из памяти. Вообще, тот факт, что объектная переменная представ-
ляет собой указатель, следует все время учитывать при разработке про-
граммы. Впрочем , проблемы, которые здесь возникают, характерны для
любых динамических переменных.
Прежде всего необходимо внимательно следить за тем , чтобы
объект ной переменной всегда был сопоставлен адрес существующего
объекта. Попытка обращения к полю или методу объекта посредством
переменной , не содержащей реального а дреса, не диагностируется ком -
пилятором и , как правило, вызывает ошибку (исключительную ситуа-
цию класса Access violation — наруш ение доступа) во время выполнения
програм мы.
Поскольку объекты размещаются в памяти программистом , он же
должен позаботиться и об их своевременном удалении. Для этого и с -
пользуется инструкция
ИмяОбъекта.Destroy;
Свои особенности имеют и операции над объектами. Так, при-
сваивание a:=b, где a и b — некоторые объектные переменные, влечет за
собой не копирование значений полей, а с овмещение указателей: после
нее обе переменные указывают на одну и ту же область памяти. Если до
этого переменная a уже содержала адрес некоторой структуры , то теперь
доступ к ней получить скорее всего не удас тся.
Соответствующую особенность имеет и сравнение д вух объектов .
Если переменные a и b содержат различные адреса, то результатом оп е -
рации a=b будет «ложь» даже в том случае, когда эти объекты принад -
лежат одному классу и их поля имеют одинаковые значения.
Наконец, при использовании объекта в качестве параметра под -
програм мы, последней передается его реальный адрес . Таким образом ,
появляется не всегда желательная воз мож ность модифицировать данный
объект в процессе ее выполнения. Объявление параметра как констант-
ного (использование префикса const) не решает э ту проблему.
{ Для объектов t1 и t2 вызываются методы Square и Perimeter. Возвращаемые ими действительные значения выводятся на экран. } t1.Destroy; t2.Destroy; // объекты удаляются из памяти ReadLn; end. Прив ед енны й код с од ержит од ну нов ую операцию: уд ал ение объ- ект а из пам ят и. Вообще, тот факт, что объект ная перем енная пред с т ав - л яет с обой указ ат ел ь , с л ед ует в с е в рем я учит ы в ат ь при раз работ ке про- грам м ы . Впрочем , пробл ем ы , которы е з д ес ь в оз никают, характ ерны д л я л юбы хд инам ичес кихперем енны х. Прежд е в с его необход им о в ним ат ел ь но с л ед ит ь з а т ем , чтобы объект ной перем енной в с егд а бы л с опос т ав л ен ад рес с ущес т в ующего объект а. Попы т ка обращения к пол ю ил и м етод у объект а пос ред с т в ом перем енной, не с од ержащей реал ь ногоад рес а, не д иагнос т ирует с я ком - пил ятором и, как прав ил о, в ы з ы в ает ош ибку (ис кл ючит ел ь ную с ит уа- цию кл ас с а Access violation — наруш ение д ос т упа) в ов рем я в ы пол нения програм м ы . Пос кол ь ку объект ы раз м ещают с я в пам ят и програм м ис том , он же д ол жен поз абот ит ь с я и об их с в оев рем енном уд ал ении. Дл я э того ис - пол ь з ует с я инс т рукция ИмяОбъекта.Destroy; Св ои ос обеннос т и им еют и операции над объект ам и. Т ак, при- с в аив ание a:=b, гд е a и b — некоторы е объект ны е перем енны е, в л ечет з а с обой не копиров ание з начений пол ей, а с ов м ещение указ ат ел ей: пос л е нее обе перем енны е указ ы в ают на од ну и т у же обл ас т ь пам ят и. Е с л и д о э тогоперем енная a уже с од ержал а ад рес некоторой с т рукт уры , тот еперь д ос т уп к ней пол учит ь с корее в с егоне уд ас т с я. Соот в ет с т в ующую ос обеннос т ь им еет и с рав нение д в ухобъектов . Е с л и перем енны е a и b с од ержат раз л ичны е ад рес а, торез ул ьт атом опе- рации a=b буд ет «л ожь » д аже в том с л учае, когд а э т и объект ы принад - л ежат од ном у кл ас с у и ихпол я им еют од инаков ы е з начения. Н аконец, при ис пол ь з ов ании объект а в качес т в е парам ет ра под - програм м ы , пос л ед ней перед ает с я его реал ь ны й ад рес . Т аким образ ом , появ л яет с я не в с егд а жел ат ел ь ная в оз м ожнос т ь м од ифициров ат ь д анны й объект в процес с е ее в ы пол нения. Объяв л ение парам ет ра как конс т ант - ного(ис пол ь з ов ание префикс а const) не реш ает э т у пробл ем у. 21
Страницы
- « первая
- ‹ предыдущая
- …
- 19
- 20
- 21
- 22
- 23
- …
- следующая ›
- последняя »