Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
Есть переменная класса TStringList, нужно программно проверить что она инициализирована. Как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:38 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
Не очень понятно.... Но я бы написал так if Assigned(variable) then... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:42 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
Спасибо работает вроде... я и сам так думал... но правильно ли так проверять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:51 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
Delphi syntax: function Assigned(const P): Boolean; Description Use Assigned to determine whether the pointer or procedure referenced by P is nil. P must be a variable reference of a pointer or procedural type. Assigned(P) corresponds to the test P<> nil for a pointer variable, and @P <> nil for a procedural variable. Assigned returns false if P is nil, true otherwise. Note: Assigned can't detect a dangling pointer--that is, one that isn't nil but no longer points to valid data. For example, in the code example for Assigned, Assigned won't detect the fact that P isn't valid. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:59 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
Неправильно так проверять. Никто и ничто не гарантирует, что указатель во всех случаях на несозданный объект - nil. Следовательно, Access Violation может появиться, причем в самый неприятный момент. Нет стопроцентного способа убедиться, создан объект или не создан. Можно только в некоторых частных случаях или по косвенным признакам. Поэтому, не надо писать такой код, где требуются подобные проверки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 20:01 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
Если переменная неинициализирована вылезает access violation, что вобщем и понятно, остается ставить try except? как-то не очень красиво ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 20:03 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
>>Неправильно так проверять. Я не согласен. В исходных кодах VCL часто встречаются такие проверки. Просто при освобождении объектов необходимо обнулять ссылки на них. Для этого можно воспользоваться procedure FreeAndNil(var Obj); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 20:12 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
sv: На заборе тоже написано...., а там дрова. Просто в Борланде требовали от кодеров делать через Assigned... По-моему, действительно, корректного способа определить нет. Остается только быть аккуратным и делать =nil после каждого Destroy (ну или freeandnil). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 02:06 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
Ага! И вобще хуже Borland'а, только Microsoft пишет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 11:25 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
Я не согласен. В исходных кодах VCL часто встречаются такие проверки. Это только там, где есть уверенность что указатель на несозданный объект - nil. Таких случаев только 3: 1. Указатель - поле класса и используется первый раз. При создании экземпляра класса поля инициализируются. Поля-указатели, в частности, выстаставляются в nil. 2. Указатель - глобальная переменная и используется первый раз. Глобальные переменные тоже инициализируются в nil. 3. Если есть уверенность, что после уничтожения объекта указатель был выставлен в nil. Но боже вас упаси использовать такие проверки для локальных переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 12:18 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
>> Но боже вас упаси использовать такие проверки для локальных переменных. System.pas Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. P -локальная По-моему надо просто аккуратно следить за всеми указателями и тогда проблем не возникнет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 13:20 |
|
||
|
Как проверить что переменная инициализирована?
|
|||
|---|---|---|---|
|
#18+
> P := Table^[Count].FInit; > if Assigned(P) then {<-------!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} Обрати внимание на предыдущую строчку. Там в P заносится значение из поля класса, соответственно, либо nil, либо инициализировано. Поэтому Assigned в данном случае можно использовать, ибо укладывается в случай (1) и случай (3) из тех, что я описал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 15:52 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=2014&tid=2117097]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 318ms |

| 0 / 0 |
