Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Как же конструируется и инициализируется объект в Object Pascal   Найти похожие ветки 

 
Оливейра ©   (2003-01-09 20:54) [0]

Вкратце начало тут:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1041965766&n=3

Прошу высказываться :-) Заранее спасибо.


 
Ketmar ©   (2003-01-09 21:01) [1]

мда. какая дискуссия... а все от нежелания выучить десяток асм-команд %-(

Satanas Nobiscum! 09-Jan-XXXVIII A.S.


 
vuk ©   (2003-01-09 21:04) [2]

>Прошу высказываться
А может ещё и голосование устроим? :o)
Я же вчера об этом писал. Вы читали?


 
Юрий Зотов ©   (2003-01-09 22:05) [3]

> Оливейра © (09.01.03 20:54)

Загляните в модуль System, посмотрите _ClassCreate - все и увидите. Там Ассемблер, а на Паскале это выглядело бы примерно так.

Пусть мы написали такой конструктор:

constructor TMyClass.Create;
begin
// Наш код
end;

А компилятор превратит его примерно вот во что:

constructor TMyClass.Create;
begin
Result := NewInstance;
try
InitInstance; // примерно ZeroMemory(Result, InstanceSize)
... // Наш код
except
Destroy;
FreeInstance;
raise
end
end;

Это конечно, не реальный код, а всего лишь схема. Но, надеюсь, понятная.


 
Alex Konshin   (2003-01-09 22:15) [4]

Ты забыл еще упомянуть, что компилятор вставляет проверку: вызывается ли конструктор для создания объекта, или объект уже создан и нужно только его инициализировать (например, вызов inherited Create). Во втором случае не будет вызова NewInstance и обнуления, то есть, почти как при вызове обычного метода.
У меня тут Delphi нет, могу ошибаться, но если память мне не изменяет, то он проверяет значение регистра DL.


 
vuk ©   (2003-01-09 22:18) [5]

to Alex Konshin:
Именно так. Флаг передается в регистре DL.


 
Оливейра ©   (2003-01-09 23:56) [6]

Огромное спасибо.
Имхо минус OP в том, что компилятор многое прячет; схема сложная но стройная.

> Ketmar
Вы же значок хотели, помнится? :) А отвечать не хотите :(


 
vuk ©   (2003-01-10 00:19) [7]

>Имхо минус OP в том, что компилятор многое прячет; схема
>сложная но стройная.
Схема как раз простая как пять копеек: попробовали создать, не удалось - прибили. А C++, если не ошибаюсь, неявная инициализация гораздо сложнее, особенно в случае с множественным наследованием.



 
Anatoly Podgoretsky ©   (2003-01-10 07:55) [8]

Оливейра © (09.01.03 23:56)
Имхо в этом плюс



Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
3-86722
Misha1
2003-01-09 19:19
2003.01.27
Как програмно указать алиас БД


7-87148
maxim2
2002-11-14 12:51
2003.01.27
Подскажите у кого стоит WinME, WinNT, Win2000 и WinXP


1-86731
Alinka
2003-01-15 16:58
2003.01.27
D3,D4,D5,D6,D7?


3-86641
Niki
2003-01-07 15:10
2003.01.27
<i>Index out of range?</i>


14-87138
Stexen
2003-01-10 00:35
2003.01.27
Исходники от UPX!!!!!!