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

Вниз

Объекты   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1145542831
Sphinx
2006-04-20 18:20
2006.06.18
Невизуальные компоненты для БД


1-1147539751
Stalker.mg
2006-05-13 21:02
2006.06.18
полоса прокрутки на главной форме


4-1142876934
Igor_thief
2006-03-20 20:48
2006.06.18
Insertion Marks and ListView


3-1145631741
Виталий84
2006-04-21 19:02
2006.06.18
Поиск по базе


15-1148543894
Val (from Kiev)
2006-05-25 11:58
2006.06.18
Киевляне, посоветуйте - где купить картридер?