Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
3-86633
Иксик
2003-01-10 13:48
2003.01.27
Чувствительность к регистру в


14-87115
Николай Быков
2003-01-06 12:56
2003.01.27
Вот точно такое же мне выдавалось раньше


3-86686
Лесник
2003-01-06 20:59
2003.01.27
как закрыть программно базу *mdb на время сжатия


1-86875
sers
2003-01-20 09:07
2003.01.27
TListItem.Data - освобождение памяти


3-86625
VID
2003-01-10 01:21
2003.01.27
DBGridEh: подсветка ячейки(не строки!)




   Наверх