Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объекты


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо