Возник такой вопрос. Предположим, у меня есть тип TIndex=0..199; Есть класс tstringlist, в который я добавляю строки через addobject – второй параметр указывается как tobject(currentindex), где currentindex имеет тип tindex.
При объявлении типа TIndex=0..199, размер его делается равным байту или стандартному интегеру? Если первое, то при приведении этого типа в tobject, возможно в tobject запишутся случайные байты из стека или кучи, находящиеся рядом с currentindex, и это багоопасно?
update Я сейчас проверил – вроде размер будет таки один байт. Значит надо помнить об этой угрозе? Как её ликвидировать? Поскольку у меня очень плохая память, я думаю сделать дополнительный тип – памятку TIndexSaveConvert=type integer, чисто чтобы не забывать.
Vit Nhoc
> возможно в tobject запишутся случайные байты из стека или кучи
даже если так - ты же потом приведешь назад к TIndex и эти байты отрежутся ни на что не повлияв. Всю жизнь типы меньшего размера к TObject приводил и ничего не было.
---
для си кстати тоже актуально - там часто в каллбеках есть void* additional_data, а туда вместо указателя хочется енум передать.
kipar
> даже если так - ты же потом приведешь назад к TIndex и эти байты отрежутся ни на что не повлияв.
Да, но те кто познал Дао программирования знают, что возможны самые разные ситуации, в том числе когда этот tobject потребуется преобразовать не в tindex, а в integer. Хотя бы из забывчивости, если я например привык всегда делать счётчик цикла типом integer.
Vit Nhoc
Сам-то как думаешь, вот есть структура из 4 байтов и ты последний (или первый) кладешь в integer обычным оператором присваивания, что происходит?
1. Туда пишется мусор из соседних байтов
2. Там остается мусор из соседних байтов
3. Высокоуровневые языки на то и высокоуровневые что за тебя предусмотрели считывание одиночного байта и расширение его до полноценного регистра
Vit Nhoc
> Значит надо помнить об этой угрозе? Как её ликвидировать?
Vit Nhoc
> я думаю сделать дополнительный тип – памятку TIndexSaveConvert=type integer, чисто чтобы не забывать.
а в 64-битность?