例如考虑Composite模式。
TComposite = class(TComponent, I1)
Private
interList: TXContainer;//一个容器类,存放“叶子”的接口引用。
Public
Procedure Add (AIntf: I1);
function DO: Boolean;
End;
它应该释放它的“叶子”吗?显然不是,那“叶子”是不是一定会晚于这个“合成对象”对象释放呢?我想也不一定吧。如果强制这样规定的话,就失去很多的灵活性。所以我们肯定想这些接口引用置nil时,不会和原对象发生什么关系,以免对象被释放后出非法地址访问错误。考虑使用什么容器呢?array?TList?TInterfaceList?
首先想到肯定是TInterfaceList了,因为我们是要容纳的就是接口。但是对他进行Free时,它会把它所有容纳的接口置为nil,这正是我们不想要的。或者我们可以在Free之前先把它存储的接口引用转为指针再置为nil。
for I := 0 to interList.Count -1 do
文章来源于领测软件测试网 https://www.ltesting.net/