Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уничтожение объекта переданного в метод [D5]


De ©   (2006-06-01 11:54:00) 

в методе нужно создать объект и передать его в другой объект
myCl2 : TmyClass2;
...
procedure TmyClass.MyMethod;
var
myCl3 : TmyClass3;
begin
myCl3 := TmyClass3.Create;
myCl2.Add(myCl3);
end;

но возникает вопрос где он должен быть уничтожен?


umbra   (2006-06-01 12:37:00) [1]

2 tesseract ©   (01.06.06 12:29) [12]


> Данная функциональность в нём есть,

нет там такой функциональности. Там есть только пустой метод Notifyкоторый, по идее, должен уведомлять объект, что ссылку на него удалили из списка.


Kolan   (2006-06-01 12:33:00) [2]

Нет с компонентами все автоматом удаляется, не забудешь....
Это как бы мое ИМХО.

Допустим мне нужно, чтобы результат работы ф-ции был объект, скажем TStringList.

Как можно поступить:
1. Пусть сама ф-ция создаст Лист и вернёт его, а удаляет кто-то другой.
Вариант мне не нравится тем, что легко забыть, что надо удалить. А если эта функция написана год назад...

2. Я обычно переделываю функцию в процедуру где передаю созданый объект как параметр. Тогда получается что удаление и создание рядом.:

StringList := TStringLIst.Create;
try
 DoSmth(StringList);
finallty
 SteingList.Free;
end;


Но это моё мнение я его никому не навязываю...


tesseract   (2006-06-01 12:29:00) [3]


> > tesseract ©   (01.06.06 12:16) [8]Ты эту траву не кури
> - несвежая она

Джулиан Бакнелл с 61. Данная функциональность в нём есть, хотя и не факт что используется.


Сергей М.   (2006-06-01 12:27:00) [4]


> Kolan ©   (01.06.06 12:23) [10]


А вот Борланду, в отличие от тебя, еще как нравится !

У него сплошь и рядом фигурирует TSomeComponent.Create(SomeContainer), и это - фундамент концепции "слежения за объектами".


Kolan   (2006-06-01 12:23:00) [5]


> то есть за уничтожением объектов должен следить класс которому
> передают объект/ссылку на объект?

Лично мне такой вариант не нравится. Стараюсь делать так, чтобы кто создал, тот и уничтожал....


Сергей М.   (2006-06-01 12:20:00) [6]


> tesseract ©   (01.06.06 12:16) [8]


Ты эту траву не кури - несвежая она


tesseract   (2006-06-01 12:16:00) [7]


> TList объекты не убивает, а только чистит (забывает) ссылки,

только до D5, начиная с неё должен убивать.


evvcom   (2006-06-01 12:11:00) [8]


> за уничтожением объектов должен следить

Никто никому ничего не должен. Ты определяешь концепцию для себя, кто и как чего должен, как-то это хоть немного документируешь (хотя бы комментарий перед классом) и строго придерживаешься этой концепции. Сравни TList и TObjectList. Оба списка могут хранить ссылки на объекты, но в TList можно записать абсолютно любые данные (4 байта), а TObjectList заточен под "хранение" объектов, потому и концепция такова. TList объекты не убивает, а только чистит (забывает) ссылки, а TObjectList свои объекты еще и разрушает.


De   (2006-06-01 12:00:00) [9]

спасибо, ответ получен


Сергей М.   (2006-06-01 12:00:00) [10]


> De   (01.06.06 11:59) [4]


Не должен, т.е. может, но не обязан.

Все зависит от конкретной логики.


umbra   (2006-06-01 11:59:00) [11]


> но возникает вопрос где он должен быть уничтожен?
>

в общем сказать трудно. Один из вариантов - в деструкторе контейнера ( myCl2)


De   (2006-06-01 11:59:00) [12]

то есть за уничтожением объектов должен следить класс которому передают объект/ссылку на объект?


tesseract   (2006-06-01 11:58:00) [13]

Объект уничтожай после того, как он стал не нужен.И  в destroy myCl2 стоить добавить  проверку на наличие неуничтоженных объектов.


Сергей М.   (2006-06-01 11:57:00) [14]


> где он должен быть уничтожен?


Где угодно.
Например, в одном из методов класса TmyClass2, коль уж скоро ссылка на myCl3 была передана тобой объекту myCl2


Наверх

Титульная страница Поиск, карта сайта Написать письмо