Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Уничтожение объекта переданного в метод   Найти похожие ветки 

 
De   (2006-06-01 11:54) [0]

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

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


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


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


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


 
tesseract ©   (2006-06-01 11:58) [2]

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


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


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

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


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

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


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

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


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


> De   (01.06.06 11:59) [4]


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

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


 
evvcom ©   (2006-06-01 12:11) [7]


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

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


 
tesseract ©   (2006-06-01 12:16) [8]


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

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


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


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


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


 
Kolan ©   (2006-06-01 12:23) [10]


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

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


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


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


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

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


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


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

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


 
Kolan ©   (2006-06-01 12:33) [13]

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

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

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

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

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


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


 
umbra ©   (2006-06-01 12:37) [14]

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


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

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



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

Текущий архив: 2006.06.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.086 c
2-1148988561
wsih
2006-05-30 15:29
2006.06.18
Как пробежаться по всем веткам узла


15-1148627805
KSergey
2006-05-26 11:16
2006.06.18
Автоподстановка в адресной строке IE


3-1145868776
cosmos
2006-04-24 12:52
2006.06.18
Ошибка подключения к Paradox через ADO


11-1128923897
shalex
2005-10-10 09:58
2006.06.18
Помогите с MCK


6-1139769318
Prod
2006-02-12 21:35
2006.06.18
Открытые порты