Главная страница
    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.016 c
15-1148146249
Nous Mellon_
2006-05-20 21:30
2006.06.18
Михаил Веллер. Интересный взгляд.


15-1147741674
Imbac
2006-05-16 05:07
2006.06.18
Коррекция зрения


15-1148574620
Nic
2006-05-25 20:30
2006.06.18
P4 TITAN GA-8LD533 Series Intel 845GL - проблемы :(


2-1148990487
Std
2006-05-30 16:01
2006.06.18
Напоминалка


2-1149159277
koha
2006-06-01 14:54
2006.06.18
CreateProcess





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