Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как удалить объект по ссылке. [D7, XP]


Страницы:   1 2

Б ©   (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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо