Конференция "Micro Focus/Borland"

Обсуждение вопросов, связанных с компанией Micro Focus/Borland, ее продуктами CaliberRM, CaliberRDM, SilkTest, StarTeam, TeamDefine, Together и других.

 
 
Добавить сообщение »

Тема: Обсуждение материала "Нельзя, но можно в Delphi, или аномалии Delphi и почему это работает"

Меня заинтересовал один момент в Delphi - почему, когда я забываю создать объект класса, программа вываливается, тем не менее, только внутри метода?

Автор:  AlnZ Дата: 08.03.2007 18:09
Ну, неплохо... Замечу то-же что слово "аномалия" не к месту. Если хочешь создать полностью недоступный извне метод, используй секцию protected...

>выловить те ошибки, которые сама Delphi поймать никак не может.

Ну уважаемый (без иронии), зачем дельфу то ругать. Мода что-ли такая? Delphi7 (среда пятилетней давности) при попытке вызвать метод (или обратиться к свойству) ещё не созданного объекта выдает предупреждение "Variable 'SomeObject' might not have been initialized".

>Ну и, наконец, xObj.Free возвращает взятую нами память обратно операционной системе. После этого, несмотря на то,
>что там лежат вычисленные нами данные, доступа туда у нас уже нет (обращение к xObj.FProperty будет вызывать
>ошибку доступа к памяти Access Violation). Именно поэтому программа падает уже внутри методов, даже если память под
>объект не была выделена.

Ну, уважаемый... А разве она не должна падать? Мы обратились к свойству уже уничтоженного класса! Вполне обычная ошибка (причем компилятор же нас предупреждал! - см. выше)

И последнее, методы класса то-же передают Self.
А в случае с конструктором новый объект будет создан только в случае, если его метод конструктора вызвать как метод класса (т.е. <указатель на класс>.<метод конструктора>). В случае, если мы запустили конструктор как обычный метод(т.е. <указатель на объект>.<метод конструктора> ), он как обычный метод и сработает (т.е. ничего создавать не будет)

Неплохая статься, думаю. Человеку, не понимающему объектную парадигму Delphi придеться разобраться в её тонкостях, что бы понять, о чем же автар пишет... Так что ставлю 4+
Ответить на сообщение »
 
Автор:  Hunter Дата: 05.03.2007 18:55
"это - широко известная аномалия защиты Delphi, заключающаяся в том, что код имеет доступ ко всем (даже приватным) данным и методам классов, описанных в том же модуле."

Поржал! Над словом "аномалия". Учите матчасть, уважаемый!
Ответить на сообщение »
 

Добавить сообщение »
Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/iservices/messages.asp?forumId=587&topicId=497