![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объекты
qTorus © (2006-06-01 05:14:00)Как проверить, выделена ли память под экземпляр Obj1 некоторого класса TMyClass? Можно, конечно, дописать в деструктор TMyClass.Destroy
Self:=nil;
и если Obj1=nil, то, значит, память не выделена. Мб есть какие-то другие методы? Просто возникает проблема с грамотным выделением памяти под объекты, чтобы не засорялась куча.
Amoeba (2006-06-01 12:34:00) [1]
> qTorus (01.06.06 12:02) [12]
>
> > А лучше не терять указатели - нехорошо это...
>
> Хотелось бы не терять... Слишком уж много кода - не могу
> понять, где это конкретно происходит. А TList - неплохая
> идея. Наверное, так и сделаю.
> <Цитата>
Тогда уж не TList, а именно TObjectList.
qTorus (2006-06-01 12:02:00) [2]
> А лучше не терять указатели - нехорошо это...
Хотелось бы не терять... Слишком уж много кода - не могу понять, где это конкретно происходит. А TList - неплохая идея. Наверное, так и сделаю.
Loginov Dmitry (2006-06-01 11:50:00) [3]А также:
TList
TObjectList
и прочее.
А лучше не терять указатели - нехорошо это...
Сергей М. (2006-06-01 11:42:00) [4]
> qTorus (01.06.06 11:19) [9]
см. TComponent.Owner
qTorus (2006-06-01 11:19:00) [5]
> А что это за "требуемый результат"?
Определить, выделена ли память под объект.
С FreeAndNil всё нормально.
И ещё один вопрос. Какие есть средства для того, чтобы избежать засорение памяти неудалёнными объектами, если на эти объекты уже потерян указатель?
tesseract (2006-06-01 11:10:00) [6]
> FreeAndNil(Obj1) - и не надо писать лишнюю строчку кода.
она уже написана за нас :-)
Amoeba (2006-06-01 11:00:00) [7]
> qTorus (01.06.06 10:54) [5]
> Assigned(Obj1) не даёт требуемого результата. После
> Obj1:=TMyClass.Create;
> .....................................
> Obj1.Destroy;
> Assigned уже возвращает true. После этих же строк кода Obj1<>nil.
> Следовательно, выход - Obj1:=nil.
FreeAndNil(Obj1) - и не надо писать лишнюю строчку кода.
Loginov Dmitry (2006-06-01 10:56:00) [8]qTorus (01.06.06 10:54) [5]
Assigned(Obj1) не даёт требуемого результата
А что это за "требуемый результат"?
qTorus (2006-06-01 10:54:00) [9]Assigned(Obj1) не даёт требуемого результата. После
Obj1:=TMyClass.Create;
.....................................
Obj1.Destroy;
Assigned уже возвращает true. После этих же строк кода Obj1<>nil. Следовательно, выход - Obj1:=nil.
Loginov Dmitry (2006-06-01 10:02:00) [10]При удалении объекта выполнить присвоение
Obj1 := nil;
При создании проверить, не создан ли объект
if not Assigned(Obj1) then;
Obj1 := TObject.Create
Это имеет смысл использовать только для случая, если переменная Obj1 - глобальная, или является полем класса.
Сергей М. (2006-06-01 09:27:00) [11]Self и Obj1 не одно и то же
evvcom (2006-06-01 09:24:00) [12]Если конструктор выполнился успешно, то память выделилась, и объект создан. Если произошло исключение, то объект не создан и память не выделилась. Третьего не дано.
ArtemESC (2006-06-01 09:20:00) [13]If not (Self = nil) then
begin
...
end