Вниз
Скачать: 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.013 c
14-87043
Andy Eremin
2003-01-08 13:33
2003.01.27
Как установить BDE Admin без дистрибутива


1-86839
error 2k
2003-01-18 23:32
2003.01.27
Пауза в программе


14-87124
Оливейра
2003-01-09 20:54
2003.01.27
Как же конструируется и инициализируется объект в Object Pascal


1-86962
farhad
2003-01-17 10:19
2003.01.27
Вопрос для знатаков...


1-86805
SpyX
2003-01-18 21:56
2003.01.27
Поиск




   Наверх