Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];

Вниз

Память, выделенная под объект, инициализируется нулями?   Найти похожие ветки 

 
SkyN   (2009-06-09 16:48) [0]

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


 
oldman ©   (2009-06-09 16:52) [1]

полагаться можно


 
Ega23 ©   (2009-06-09 17:03) [2]


class function TObject.InitInstance(Instance: Pointer): TObject;
{$IFDEF PUREPASCAL}
var
 IntfTable: PInterfaceTable;
 ClassPtr: TClass;
 I: Integer;
begin
 FillChar(Instance^, InstanceSize, 0);
 PInteger(Instance)^ := Integer(Self);
 ClassPtr := Self;
 while ClassPtr <> nil do
 begin
   IntfTable := ClassPtr.GetInterfaceTable;
   if IntfTable <> nil then
     for I := 0 to IntfTable.EntryCount-1 do
   with IntfTable.Entries[I] do
   begin
     if VTable <> nil then
       PInteger(@PChar(Instance)[IOffset])^ := Integer(VTable);
   end;
   ClassPtr := ClassPtr.ClassParent;
 end;
 Result := Instance;
end;
{$ELSE}
asm
       PUSH    EBX
       PUSH    ESI
       PUSH    EDI
       MOV     EBX,EAX
       MOV     EDI,EDX
       STOSD
       MOV     ECX,[EBX].vmtInstanceSize
       XOR     EAX,EAX
       PUSH    ECX
       SHR     ECX,2
       DEC     ECX
       REP     STOSD
       POP     ECX
       AND     ECX,3
       REP     STOSB
       MOV     EAX,EDX
       MOV     EDX,ESP
@@0:    MOV     ECX,[EBX].vmtIntfTable
       TEST    ECX,ECX
       JE      @@1
       PUSH    ECX
@@1:    MOV     EBX,[EBX].vmtParent
       TEST    EBX,EBX
       JE      @@2
       MOV     EBX,[EBX]
       JMP     @@0
@@2:    CMP     ESP,EDX
       JE      @@5
@@3:    POP     EBX
       MOV     ECX,[EBX].TInterfaceTable.EntryCount
       ADD     EBX,4
@@4:    MOV     ESI,[EBX].TInterfaceEntry.VTable
       TEST    ESI,ESI
       JE      @@4a
       MOV     EDI,[EBX].TInterfaceEntry.IOffset
       MOV     [EAX+EDI],ESI
@@4a:   ADD     EBX,TYPE TInterfaceEntry
       DEC     ECX
       JNE     @@4
       CMP     ESP,EDX
       JNE     @@3
@@5:    POP     EDI
       POP     ESI
       POP     EBX
end;
{$ENDIF}


 
Юрий Зотов ©   (2009-06-10 15:49) [3]

> SkyN   (09.06.09 16:48)

Если метод InitInstance не перекрыт, то да. А если перекрыт, то инициализируется его кодом.



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

Форум: "Начинающим";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
1-1211807607
Jungle
2008-05-26 17:13
2009.08.09
"Правильно" преобразовать тип Variant


3-1225653941
lamer6666
2008-11-02 22:25
2009.08.09
Можно ли одной командой Inset вставить данные в две таблицы?


11-1205170056
DJ_UZer
2008-03-10 20:27
2009.08.09
Файлы


15-1244291308
@!!ex_
2009-06-06 16:28
2009.08.09
Помогите с настройкой Linux а


15-1244179520
DelphiN!
2009-06-05 09:25
2009.08.09
Какая какая из мышек произвела действие?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский