Главная страница
    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.47 MB
Время: 0.01 c
15-1148640234
Nic
2006-05-26 14:43
2006.06.18
Lada Kalina: кто-нибудь катался?


5-1133558900
Adil
2005-12-03 00:28
2006.06.18
Svyaz mejdu komponentami v odom unite


15-1148670836
Cerberus
2006-05-26 23:13
2006.06.18
Чё то я запутался.


2-1148890598
Barsky
2006-05-29 12:16
2006.06.18
Код ошибки при отправки на SMTP (Indy 9)


15-1148535398
Ega23
2006-05-25 09:36
2006.06.18
С Днём рождения! 25 мая





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский