Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.011 c
6-1139633936
Интересующийся
2006-02-11 07:58
2006.06.18
Передать ресурс dll клиенту при помощи SendBuf()


11-1128890490
DillerXX
2005-10-10 00:41
2006.06.18
Центр экрана


15-1148286283
Fin
2006-05-22 12:24
2006.06.18
Правила в фаерволе для ограничения


15-1148583587
Andy BitOff
2006-05-25 22:59
2006.06.18
Насколь серьёзная такая защита?


1-1146918985
pirate
2006-05-06 16:36
2006.06.18
Out of memory





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский