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

Вниз

Динамический объект.   Найти похожие ветки 

 
Shopot ©   (2004-04-24 23:14) [0]

Как определить существует ли оъект уже, или еще нет?
Например: if MyObj <> nil then ... не подходит,
         if MyObj.InstanceSize > 0 then ... вызывает ошибку.

И почему метод Free не присваивает переменной значение nil, а нужно специально вызывать FreeAndNil?


 
Shopot ©   (2004-04-24 23:14) [0]

Как определить существует ли оъект уже, или еще нет?
Например: if MyObj <> nil then ... не подходит,
         if MyObj.InstanceSize > 0 then ... вызывает ошибку.

И почему метод Free не присваивает переменной значение nil, а нужно специально вызывать FreeAndNil?


 
default ©   (2004-04-24 23:32) [1]

"а нужно специально вызывать FreeAndNil?"
да
"И почему метод Free не присваивает переменной значение nil"
это невозможно поскольку Free передаётся указатель на экземпляр, а не адрес памяти где лежим этот указатель
в окне CPU можно увидеть что FreeAndNil-у передаётся именно
адрес переменной где лежит адрес объекта
"Как определить существует ли оъект уже, или еще нет?"
без дополнительного привлечения ресурсов(счётчики всевозможные)
никак


 
default ©   (2004-04-24 23:32) [1]

"а нужно специально вызывать FreeAndNil?"
да
"И почему метод Free не присваивает переменной значение nil"
это невозможно поскольку Free передаётся указатель на экземпляр, а не адрес памяти где лежим этот указатель
в окне CPU можно увидеть что FreeAndNil-у передаётся именно
адрес переменной где лежит адрес объекта
"Как определить существует ли оъект уже, или еще нет?"
без дополнительного привлечения ресурсов(счётчики всевозможные)
никак


 
Гаврила   (2004-04-25 00:06) [2]

>>И почему метод Free не присваивает переменной значение nil,
скажу проще, чем  default
потому что таких переменных может быть 28 или более
Экземпляр класса не может знать обо всех ссылках на него, поскольку ссылки как бы снаружи, а он как бы вещь в себе

ЧТо касается FreeAndNil
мне не нравится эта конструкция. По ненпонятныи для меня причинам, Борланд не объявил входной парамерт как TObject. В результате один раз налетел - поменял объект на интерфейс, компилятор пропустил, а потом произощел крах программы ((

как определить ? если еще не создан, то скорее всего nil, если уже разрушен - обниливать


 
Гаврила   (2004-04-25 00:06) [2]

>>И почему метод Free не присваивает переменной значение nil,
скажу проще, чем  default
потому что таких переменных может быть 28 или более
Экземпляр класса не может знать обо всех ссылках на него, поскольку ссылки как бы снаружи, а он как бы вещь в себе

ЧТо касается FreeAndNil
мне не нравится эта конструкция. По ненпонятныи для меня причинам, Борланд не объявил входной парамерт как TObject. В результате один раз налетел - поменял объект на интерфейс, компилятор пропустил, а потом произощел крах программы ((

как определить ? если еще не создан, то скорее всего nil, если уже разрушен - обниливать


 
Shopot ©   (2004-04-25 23:46) [3]

>Гаврила  :  еще не создан, то скорее всего nil, если уже разрушен - обниливать.

А вот когда еще не создан не nil, а обниливать проблематично. Поясню: если объект удаляет сам себя, то свою переменную он никак не может обнилить.


 
Shopot ©   (2004-04-25 23:46) [3]

>Гаврила  :  еще не создан, то скорее всего nil, если уже разрушен - обниливать.

А вот когда еще не создан не nil, а обниливать проблематично. Поясню: если объект удаляет сам себя, то свою переменную он никак не может обнилить.


 
ЮЮ ©   (2004-04-26 03:21) [4]

>Поясню: если объект удаляет сам себя, то свою переменную он никак не может обнилить.

Создал же он себя не сам! Поэтому все будет прозрачнеее, когда кто создает объект, тот и удаляет его


 
ЮЮ ©   (2004-04-26 03:21) [4]

>Поясню: если объект удаляет сам себя, то свою переменную он никак не может обнилить.

Создал же он себя не сам! Поэтому все будет прозрачнеее, когда кто создает объект, тот и удаляет его


 
Тимохов ©   (2004-04-26 10:50) [5]


> И почему метод Free не присваивает переменной значение nil,
> а нужно специально вызывать FreeAndNil?

Постараюсь еще проще сказать - ссылка на объект может лежать не только в переменной (в привычном для нас смысле - т.е. с возможностью изменения значения), но и там, где изменять значение нельзя (например, результат некой функции).

т.е.
function Get: Tobject;
begin
  result := ...
end;

Get.Free();// что здесь обниливать?


 
Тимохов ©   (2004-04-26 10:50) [5]


> И почему метод Free не присваивает переменной значение nil,
> а нужно специально вызывать FreeAndNil?

Постараюсь еще проще сказать - ссылка на объект может лежать не только в переменной (в привычном для нас смысле - т.е. с возможностью изменения значения), но и там, где изменять значение нельзя (например, результат некой функции).

т.е.
function Get: Tobject;
begin
  result := ...
end;

Get.Free();// что здесь обниливать?


 
Anatoly Podgoretsky ©   (2004-04-26 11:06) [6]

Ссылка может быть и анонимной, тогда вообще нечего обнулять.


 
Anatoly Podgoretsky ©   (2004-04-26 11:06) [6]

Ссылка может быть и анонимной, тогда вообще нечего обнулять.


 
Anatoly Podgoretsky ©   (2004-04-26 11:07) [7]

А за FreeAndNil поубивал бы


 
Anatoly Podgoretsky ©   (2004-04-26 11:07) [7]

А за FreeAndNil поубивал бы


 
Sun bittern ©   (2004-04-26 11:16) [8]

Anatoly Podgoretsky ©   (26.04.04 11:07) [7]

За что, так жестоко?


 
Sun bittern ©   (2004-04-26 11:16) [8]

Anatoly Podgoretsky ©   (26.04.04 11:07) [7]

За что, так жестоко?


 
evvcom ©   (2004-04-26 11:18) [9]


> За что, так жестоко?

Пора привыкнуть. Анатолий очень категоричен.


 
evvcom ©   (2004-04-26 11:18) [9]


> За что, так жестоко?

Пора привыкнуть. Анатолий очень категоричен.



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

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

Наверх




Память: 0.49 MB
Время: 0.059 c
6-1079643480
pirat
2004-03-18 23:58
2004.05.09
как насильно завершить соединения TIdTCPServer


3-1081697458
Mishenka
2004-04-11 19:30
2004.05.09
Добавление записи в таблицу


3-1081923210
Balamut
2004-04-14 10:13
2004.05.09
Проблема блокировки таблиц в Delphi


14-1081980627
Мазут Береговой
2004-04-15 02:10
2004.05.09
Анекдоты от науки:


3-1081689688
Smile)))
2004-04-11 17:21
2004.05.09
Выделить в DBGRID всю строку





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский