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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
2-1148957631
verybadbug
2006-05-30 06:53
2006.06.18
загрузка данных в webbrowser


2-1148896285
IAmDanil
2006-05-29 13:51
2006.06.18
Как загрузить текстовый файл из интернета в memo1.lines?


6-1139633936
Интересующийся
2006-02-11 07:58
2006.06.18
Передать ресурс dll клиенту при помощи SendBuf()


15-1147987692
TDelphiWebScript
2006-05-19 01:28
2006.06.18
[DelphiWebScript] Как изменять размер динамических массивов ?


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





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