Форум: "Начинающим";
Текущий архив: 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