![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как удалить объект по ссылке. [D7, XP]
Б © (2010-04-12 18:51:00)Здрасти!
Задача такая: создаётся любой класс.
Есть указатель, которому передаётся адресс класса.
И теперь как зная только этот указатель (P) удалить сам класс, на который он указывает.
Var
P: Pointer; // Хотя класс это уже указатель.
O: TObject; // Любой класс.
begin
O:= TObject.Create;
P:= O; // Присваиватся будут только классы.
TObject(P).Free; // Пытаемся удалить O через P.
If Assigned(O) then Caption:= 'True'
else Caption:= 'False';
End;
Пишет 'True'.
Вопрос: Как занилить O имея при себе только P?
Б (2010-04-12 20:04:00) [21]Для общей картинки:
Type
TObjMan = class // Var Man: TObjMan.
Private
FList: TList;
Public
Function GetObj_1: TObj_1;
Function GetObj_2(N1, N2: LongWord): TObj_2; overload;
Function GetObj_2(const FileName: string): TObj_2; overload;
Function GetObj_3...
Function GetObj_4...
. . . . .
End;
Function TObjMan.GetObj_1: TObj_1;
begin
Resulr:= TObj_1.Create;
FList.Add(Result);
End;
Var
O, A, B, X: TObj_2;
Procedure Init;
begin
O:= Man.GetObj_2(10, 10); // Как бы удобно.
. . . . .
End;
Procedure Free;
begin
(*
O.Free // Не хочется так прописывать.
TList завёл для того, чтобы "типа" менеджер сам занимался
удалением порождённых объектов. В своём деструкторе.
Что скажете? ;)
*)
End;
Б (2010-04-12 19:51:00) [22]
> Демо © (12.04.10 19:40) [9]
Спасибо!
Достаточно замутно.
Демо (2010-04-12 19:40:00) [23]
pp: Pointer;
o: TObject;
begin
o := TObject.Create;
pp := Addr(o);
FreeAndnil(TObject(pp^));
if Assigned(o) then ShowMessage('Ok');
Б (2010-04-12 19:25:00) [24]
> в P и в O хранится один и тот же адрес
Ну дак понятно. P:= O.
_Юрий (2010-04-12 19:23:00) [25]
> Вроде как в P хранится адрес O.
нет
в P и в O хранится один и тот же адрес
Б (2010-04-12 19:22:00) [26]
> Anatoly Podgoretsky © (12.04.10 19:17) [5]
> И как тебе это поможет с О
Вроде как в P хранится адрес O.
Anatoly Podgoretsky (2010-04-12 19:17:00) [27]И как тебе это поможет с О
Б (2010-04-12 19:11:00) [28]Всё равно выводит 'True'.
Б (2010-04-12 19:04:00) [29]Ну да FreeAndNil (TObject(P))
Anatoly Podgoretsky (2010-04-12 19:01:00) [30]> Б (12.04.2010 18:51:00) [0]
А где хотя бы попытка "занилить"?
Игорь Шевченко (2010-04-12 18:58:00) [31]изучить freeandnil по справке ?