Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-78107
off
2003-07-08 14:15
2003.07.24
Что дает смена прошивки резака? И где ее взять?


1-77974
Прохожий
2003-07-11 10:47
2003.07.24
ListBox


14-78052
Soft
2003-07-09 16:15
2003.07.24
Зачем нужен компьютер простому смертному?


1-77953
Дмитрий Стрижевич
2003-07-10 03:26
2003.07.24
копирование объектов...


1-77925
Непомню
2003-07-10 14:37
2003.07.24
SynEdit и Delphi 7