TList,TObjectList 使用——资源释放
2013-11-17 19:45
387 查看
TOjectList = Class (Tlist);
TOjectList继承Tlist,从名字上看就可以知道它是专门为对象列表制作的,那么他到底丰富了那些功能呢?
首先是 TObject 作为对象可以方便使用,无需指针强制。
丰富了 Notify 针对当前状态处理,比如如果是删除就将该点的引用一并清理掉;
procedure TObjectList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if (Action = lnDeleted) and OwnsObjects then
TObject(Ptr).Free;
inherited Notify(Ptr, Action);
end;
在 Tlist 中,有 Clear(),将呼叫 SetCount,SetCapacity;即删除所有。
procedure TList.Clear();
begin
SetCount(0);
SetCapacity(0);
end;
当该对象销毁是,也会自动调用Clear() 清除所有。
destructor TList.Destroy;
begin
Clear();
end;
总结:如果有一个对象需要用到列表,最好从 TOjectList 开始继承,对资源释放有完善的处理机制。
如果从 Tlist 继承也必须实现 Notify() ,方便资源释放,减少麻烦。
TOjectList继承Tlist,从名字上看就可以知道它是专门为对象列表制作的,那么他到底丰富了那些功能呢?
首先是 TObject 作为对象可以方便使用,无需指针强制。
丰富了 Notify 针对当前状态处理,比如如果是删除就将该点的引用一并清理掉;
procedure TObjectList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if (Action = lnDeleted) and OwnsObjects then
TObject(Ptr).Free;
inherited Notify(Ptr, Action);
end;
在 Tlist 中,有 Clear(),将呼叫 SetCount,SetCapacity;即删除所有。
procedure TList.Clear();
begin
SetCount(0);
SetCapacity(0);
end;
当该对象销毁是,也会自动调用Clear() 清除所有。
destructor TList.Destroy;
begin
Clear();
end;
总结:如果有一个对象需要用到列表,最好从 TOjectList 开始继承,对资源释放有完善的处理机制。
如果从 Tlist 继承也必须实现 Notify() ,方便资源释放,减少麻烦。
相关文章推荐
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- c++ Pthread创建线程后必须使用join或detach释放线程资源
- 使用window.open()方式打开新页面,关闭后浏览器不能释放资源,需要等待主界面关闭后才能释放
- 使用MappedByteBuffer读取大文件(1G以上)和释放MappedByteBuffer的资源
- 使用ScopeGuard统一管理系统资源的释放
- 释放资源:讨论Dispose和析构函数的使用
- 警惕利用类的构造和析构函数来做资源分配释放时候,对临时变量的使用
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- C#中using关键字在资源释放中的使用
- Pthread创建线程后必须使用join或detach释放线程资源
- 使用Excel COM组件导出数据后释放Excel资源
- Pthread创建线程后必须使用join或detach释放线程资源
- c#:使用using关键字自动释放资源未必一定就会有明显好处(转)
- 使用HttpURLConnection时遇到的资源未释放的问题
- DotNet下使用GDI+绘图时资源是否需要释放
- 使用IBinder的linkToDeath机制来释放资源
- 将EXE作为资源,然后在释放到磁盘上并运行该exe程序(使用了FindResource,LoadResource,然后用CFile写成一个文件)
- 资源使用后,一定释放
- 第三节:使用终结器来释放本地资源
- 【.Net码农】c#:使用using关键字自动释放资源未必一定就会有明显好处