Форум: "Потрепаться";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизКак же конструируется и инициализируется объект в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c