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