![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
МНОГА указателей...
ArtemESC © (2006-10-04 19:42:00)Пишу модуль - возникло очень много указателей, при чем некоторые из них указывает на структуры с другими... Очистка представляет собой достаточно сложный и путанный процесс - можно ли как то его упростить?
Джо (2006-10-04 23:53:00) [1]
type
IMyInterface = interface
end;
TMyClass = class (TInterfacedObject, IMyInterface)
public
destructor Destroy; override;
end;
...
destructor TMyClass.Destroy;
begin
ShowMessage ('Destroyed');
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Intf: IMyInterface;
begin
Intf := TMyClass.Create;
end;
Ничего обнулять не нужно :)
Джо (2006-10-04 23:49:00) [2]> [17] isasa © (04.10.06 23:47)
> Джо © (04.10.06 23:16) [16]
> Тут вопрос возник.
> А какая разница, делать Intrf:=nil (Intrf.Release()), или
> Class.Free? Все равно следить ...
А зачем делать Intrf := nil? Это бывает нужно достаточно редко. Если ссылок на интерфейс не осталось, то, после выхода за пределы видимости он и сам обнулится.
isasa (2006-10-04 23:47:00) [3]Джо © (04.10.06 23:16) [16]
Тут вопрос возник.
А какая разница, делать Intrf:=nil (Intrf.Release()), или Class.Free? Все равно следить ...
Джо (2006-10-04 23:16:00) [4]А "работает" все благодаря счетчику ссылок, который есть у интерфейсов.
Джо (2006-10-04 23:15:00) [5]> [14] ArtemESC © (04.10.06 23:07)
> Джо © (04.10.06 21:29) [12]
> Не посоветуете ресурс какой, где четко описано, как это
> работает?
У Тенцера есть статья по интерфейсам, кажется. А вообще, любая приличная книжка по Delphi may help. В Хелпе тоже достаточно информации.
ArtemESC (2006-10-04 23:07:00) [6]default © (04.10.06 21:26) [11]
Это как?
Джо © (04.10.06 21:29) [12]
Не посоветуете ресурс какой, где четко описано, как это работает?
TUser © (04.10.06 21:39) [13]
Это не облегчает задачу..
TUser (2006-10-04 21:39:00) [7]Ну, строй дерево, хоть с указателями, хоть с объектами. В коде их будет не много.
Джо (2006-10-04 21:29:00) [8]Передалать записи в классы, а с классами работать через их интерфейсы :) И всех делов, не нужно за освобождением следить.
default (2006-10-04 21:26:00) [9]свалить на платформу где есть встроенная автоматическая сборка мусора
Ketmar (2006-10-04 20:58:00) [10]Abstract Synthax Trees.
ArtemESC (2006-10-04 20:51:00) [11]Ketmar © (04.10.06 20:50) [8]
Это что еще за штука?
Ketmar (2006-10-04 20:50:00) [12]тут, вообще-то, AST. которые можно отлично оформить классами.
ArtemESC (2006-10-04 20:45:00) [13]Вообще говоря все указатели находяться в одном классе...
Пишу универсальный паскаль-парсер, который разбирает все в разобранные структуры - тут то и указатели, в силу универсальности...
Ketmar (2006-10-04 19:57:00) [14]>[5] Джо(c) 4-Oct-2006, 19:55
а я просто тихонько мечтаю о полноценном GC и пишу как обычно. %-)
Джо (2006-10-04 19:55:00) [15]Лично я вообще в последнее время предпочитаю работать с объектами только (ну, по возможности :) )через их интерфейсы. Помимо других прелестей — автоматическая очистка памяти и не нужны все эти finally с Free и FreeMem :)
ProgRAMmer Dimonych (2006-10-04 19:50:00) [16]Указатели - это Pointer?
Я, если честно, не представляю себе, зачем нужно действительно МНОГАуказателей. Подозреваю, что там и без них можно обойтись. Если вопрос в том, как, то исходник в студию.
Zeqfreed (2006-10-04 19:50:00) [17]а) Продумать архитектуру
б) Забить на очистку
в) Забить на сложный и путанный процесс
г) Забить на программирование
д) Продумать архитектуру
Джо (2006-10-04 19:49:00) [18]> Очистка представляет собой достаточно сложный и путанный
> процесс - можно ли как то его упростить?
Переписать, используй всякие контейнеры или механизмы наподобие класса TList с автоочисткой. Use OOP, dude ;)
Ketmar (2006-10-04 19:48:00) [19]garbage collector.