Q
QSmile
Unregistered / Unconfirmed
GUEST, unregistred user!
关于接口 Interface 在使用时的一点问题,讨论
比如我定义一个接口.
ITest = interface
procedure Test;
end;
用一个对象实现它
TTest = class(TInterfacedObject, ITest)
procedure Test;
end;
使用时我这样用
var
test:ITest;
test := ITest(TTest.Create);
test.test;
这样是没有问题的,
而这时再用
test := nil
时 test 对象就被 Free 了.
或再用
test := ITest(TTest.Create);
前一次建立的 test 对象也是被 Free 了的.
而这时我想把 test 的指针清空或改变, 而又不想它指向的对象被 Free.
我应该如何做呢?
因为我们建一些象方放 Tlist 里, 建立后如这样
for i := 0 to 100 do
begin
test := ITest(TTest.Create);
test.test;
test.xxx :=1000;
m_list.add(Pointer(test))
// m_list 为 TList
end;
这样的话,只有最后的个接口是有效的, 前面的都被自动 Free 了.
有会么办法呢
比如我定义一个接口.
ITest = interface
procedure Test;
end;
用一个对象实现它
TTest = class(TInterfacedObject, ITest)
procedure Test;
end;
使用时我这样用
var
test:ITest;
test := ITest(TTest.Create);
test.test;
这样是没有问题的,
而这时再用
test := nil
时 test 对象就被 Free 了.
或再用
test := ITest(TTest.Create);
前一次建立的 test 对象也是被 Free 了的.
而这时我想把 test 的指针清空或改变, 而又不想它指向的对象被 Free.
我应该如何做呢?
因为我们建一些象方放 Tlist 里, 建立后如这样
for i := 0 to 100 do
begin
test := ITest(TTest.Create);
test.test;
test.xxx :=1000;
m_list.add(Pointer(test))
// m_list 为 TList
end;
这样的话,只有最后的个接口是有效的, 前面的都被自动 Free 了.
有会么办法呢