Главная страница
    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.004 c
15-1244195182
test
2009-06-05 13:46
2009.08.09
Отключить всплывающие окна об ошибках.


15-1244537205
Neket
2009-06-09 12:46
2009.08.09
Классификация БД


8-1196042949
JJey
2007-11-26 05:09
2009.08.09
Как из Delphi запустить презентацию PowerPoint


15-1244549105
oldman
2009-06-09 16:05
2009.08.09
Все на свете можно заменить кусочком пластилина...


6-1205463868
prodex
2008-03-14 06:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский