KDA
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору krast По "крайней мере" относилось к другим компиляторам, скажет Turbo Pascal под DOS. Еще раз: переменные не обнуляются. А обнуляется принадлежащая им область памяти, а это несколько разные вещи. Скажем, в случае Boolean никто не обязан нам гарантировать, что двоичный 0 соответствует false (иначе было бы допустимо НЕЯВНОЕ преобразование в Integer, скажем, а этого нет). Или вот смотри приведенный выше пример с TTest1 - там появляется двоичный нуль, а с т.з. задачи переменая является невалидной. В случае стандартных типов разницы особой нет, но это всего лишь - особенности реализации, и можно закладываться на них, к примеру (как я делаю), но всегда отдавать себе отчет, что это может оказаться временным Со стрингами, кстати, хорошо демонстрируется: на глобах - это тот же двоичный нуль (при операциях сравнения эквивалент ''). Больше похоже на "обнуление" в неглобах: всегда в неявном виде присутствует конструктор и деструктор, плюс еще доп код, т.е, не просто обнуление, а правильнее (извини за грубый псевдокод) var S : String; begin ... end; превращается в begin S.Init; //"обнуление" try ... finally S.Free end; end; C интерфейсами - так же. Так же, по поводу нулей, можно глянуть реализацию TObject.InitInstance и увидеть, что и Boolean'ы и String'и и вообще все затирается обычными нулями без малейшей поправки на тип ЗЫ.. Почитать - для начала MSDN по структуре PE | Всего записей: 265 | Зарегистр. 30-12-2001 | Отправлено: 16:05 25-05-2005 | Исправлено: KDA, 16:08 25-05-2005 |
|