![]() |
| ||
|
|
Новости |
Поиск |
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-13 00:07:00) [1]
> Все разборки на том форуме. ;)
А ты когда-нибудь книгу по программированию видел живьем ? Увидишь - ты ее читай. А не по форумам сотню мудрецов напрягай.
Б (2010-04-12 23:54:00) [2]> TAX (12.04.10 23:51) [29]
Все разборки на том форуме. ;)
TAX (2010-04-12 23:51:00) [3]Нет повести печальнее на свете...Ладно вернемся к началу:
> Задача такая: создаётся любой класс.Есть указатель, которому
> передаётся адресс класса.И теперь как зная только этот указатель
> (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?
[b]Внимание ответ[/b]: никак.
Б (2010-04-12 23:24:00) [4]Давно было. Не помню.
Вот нашёл.
http://www.delphimaster.net/view/2-1232025231
P.S. Как было написано, так и пишу. ;)
Игорь Шевченко (2010-04-12 23:18:00) [5]
> Мне Mbo, когда я тут вопрос про списки задавал, так посоветовал.
не верю. не мог он такого посоветовать. первая же команда выдаст List index out of bounds
Б (2010-04-12 23:08:00) [6]
> какая хрен разница ?
Мне Mbo, когда я тут вопрос про списки задавал, так посоветовал.
Б (2010-04-12 23:05:00) [7]
> Amoeba_ (12.04.10 22:55) [22]
Так что ли? 'True' - итог.
TObject(P).Free; // Пытаемся удалить O через P.
TObject(P):= nil;
Игорь Шевченко (2010-04-12 23:03:00) [8]
> Там down to.
какая хрен разница ?
Б (2010-04-12 23:03:00) [9]
> _Юрий © (12.04.10 22:55) [21]
> Ну да. А потом ты записываешь в P nil, и ожидаешь, что почему
> то nil окажется и в O/
Имея адресс O, можно им манипулировать.
> просто прелестно.
Там down to.
Amoeba_ (2010-04-12 22:55:00) [10]
> Привести указатель к TObject и вызвать Free. Объект то не
> занилится.
Так ведь и вручную, без FreeAndNil можно было после этого занилить.
_Юрий (2010-04-12 22:55:00) [11]
> Ну дак понятно. P:= O.
Ну да. А потом ты записываешь в P nil, и ожидаешь, что почему то nil окажется и в O/
> For i:= FList.Count to 0 do
> TObject(FList.Items[i]).Free;
>
просто прелестно.
И сколько раз пройдет цикл?)
Б (2010-04-12 22:51:00) [12]И что там предложили?
Привести указатель к TObject и вызвать Free. Объект то не занилится.
Так не получилось. - Б (12.04.10 19:04) [3]
Ещё про Assigned рассказали и про overload.
Не следи за мной. ;)
Amoeba_ (2010-04-12 22:42:00) [13]
> Б (12.04.10 18:51)
Сказка про белого бычка? На колу мочало?
Вам ведь уже 2 дня назад все разжевали и в рот положили здесь:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=76466
Б (2010-04-12 22:28:00) [14]Вот так получилось:
Constructor TManaged.Create;
begin
inherited;
FList:= TList.Create;
End;
Destructor TManaged.Destroy;
Var
i: LongWord;
begin
For i:= FList.Count to 0 do
TObject(FList.Items[i]).Free;
FList.Free;
inherited;
End;
Function TManaged.GetTexture(const FileName: string): TTex;
begin
Result:= TTex.Create;
Result.Load(FileName);
FList.Add(Result);
End;
Демо (2010-04-12 22:11:00) [15]
> Б (12.04.10 20:32) [13]
> > Посмотри в справке TObjList вместо TList.Если посмотреть
> исходники, то от TList почти ни чем не отличается.
Ключевое слово -"Почти".
TObjectList самостоятельно уничтожает объекты при удалении из списка.
Б (2010-04-12 20:53:00) [16]Не туда запостил. ;)
Б (2010-04-12 20:53:00) [17]TButton.WordWrap:= True. Не?
Игорь Шевченко (2010-04-12 20:34:00) [18]
> Вроде как в P хранится адрес O.
Если твой знакомый сменил номер телефона, должен ли этот номер автоматически измениться в твоей записной книжке ?
Б (2010-04-12 20:32:00) [19]
> Посмотри в справке TObjList вместо TList.
Если посмотреть исходники, то от TList почти ни чем не отличается.
Демо (2010-04-12 20:23:00) [20]
> Что скажете? ;)
Посмотри в справке TObjList вместо TList.