Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Вниз

Создание и уничтожени обьектов.   Найти похожие ветки 

 
Separator   (2003-07-11 05:35) [0]


var
C1: TClass1;
begin
{Создание 1 обекта}
C1:= TClass1.Create(1);
.......
{Создание 2 обекта}
C1:= TClass1.Create(1);
.....
C1.Destroy
end.


Вопрос: Будет ли уничтожен 1 обект без вызова Destroy при создании 2 обекта?

Или такой случай:


var C1: TClass1;

function F1: TClass1;
var Temp: TClass1
begin
{создание 2 обекта}
Temp:= TClass1.Create(2);
.....
Result:= Temp
end;

begin
{создание 1 обекта}
C1:= TClass1.Create(1);
.....
C1:= F1;
.....
C1.Free
end.


Вопрос в принципе тот же, т.е. будет ли уничтожен 1 обект при вызове функции F1, если нет, то как это можно сделать?


 
Babay   (2003-07-11 05:46) [1]

Нет в обоих случаях
... А лучше что нибудь почитй по этому поводу.


 
Separator   (2003-07-11 06:06) [2]

А как тогда во втором случае уничожить 1 обект?


 
ЮЮ   (2003-07-11 06:09) [3]

Если тебе нужен только один объект, то перед созданием второго, просто убей первый:
var
C1: TClass1;
begin
C1 := TClass1.Create(1);
try
.......
finally
С1.Free;
end;
C1 := TClass1.Create(2);
try
.....
finally
C1.Free;
end;
end.

А во втором случае, можно так
var
C1: TClass1;
Procedure(var F1: TClass1; Param: integer);
begin
if F1 <> nil then F1.Free;
F1 := TClass1.Create(Param);
end;
begin
F1(C1, 1);
try
....
F1(C1, 2);
...
finally
C1.Free;
end;
end;


 
ЮЮ   (2003-07-11 06:12) [4]

Сорри,
Procedure F1(Param: integer);

...
F1(1);

или
Procedure New(var F1: TClass1; Param: integer);
...
New(C1, 1);





 
Separator   (2003-07-11 06:17) [5]


procedure P2(var C: TClass1);
begin
if C = nil then C:= TClass1.Create;
.....
end;

procedure P1;
var C1: TClass1;
begin
F1(C1);
.....
F1.Free
end;


Вопрос: А бутет ли в локальной процедуре(P2) переменная С1 = nil или С = "случайное значение"?


 
ЮЮ   (2003-07-11 06:39) [6]

т.к. компилятор говорит "значение переменной С1 может быть неинициализировано", то ,в принципе, возможно и "случайное значение"


 
Separator   (2003-07-11 07:32) [7]

а существует способ узнать был ли создан обект или это просто "случайное значение"?


 
Skier   (2003-07-11 08:48) [8]

>Separator © (11.07.03 07:32)
Способа узнать "был ли создан обект или это просто "случайное значение"?" - нет. Есть только способ узнать очищен ли указатель или нет. Поэтому ты должен сам за этим следить,
(За очисткой указателя. Полезно в этом смысле использовать
FreeAndNil(...)) причём очень внимательно дабы не осложнять себе жизнь появлением злобных AV.


 
Separator   (2003-07-11 08:48) [9]

up



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-77998
Michael_K
2003-07-10 23:52
2003.07.24
ListView_SetBkImage вообще не работает


14-78145
Injustic
2003-07-09 10:49
2003.07.24
Коды #


4-78197
VVA
2003-05-21 17:19
2003.07.24
Что делать с типами?


14-78097
MishaS
2003-07-08 11:22
2003.07.24
Установка MS SQL Server 2000


1-77883
Igor_
2003-07-11 17:57
2003.07.24
PReport. Как можно запретить печать и сохранение отчета?





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