Форум: "Основная";
Текущий архив: 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.007 c