为什么我的 Delphi 对象上没有调用 _AddRef 和 _Release?
我真的很困惑。
// initial class
type
TTestClass =
class( TInterfacedObject)
end;
{...}
// test procedure
procedure testMF();
var c1, c2 : TTestClass;
begin
c1 := TTestClass.Create(); // create, addref
c2 := c1; // addref
c1 := nil; // refcount - 1
MessageBox( 0, pchar( inttostr( c2.refcount)), '', 0); // just to see the value
end;
它应该显示 1,但它显示 0。无论我们执行多少次赋值,该值都不会改变!为什么不呢?
I'm really confused.
// initial class
type
TTestClass =
class( TInterfacedObject)
end;
{...}
// test procedure
procedure testMF();
var c1, c2 : TTestClass;
begin
c1 := TTestClass.Create(); // create, addref
c2 := c1; // addref
c1 := nil; // refcount - 1
MessageBox( 0, pchar( inttostr( c2.refcount)), '', 0); // just to see the value
end;
It should show 1, but it shows 0. No matter how many assignments we'll perform, the value would not change! Why not?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
仅当您分配给接口变量而不是对象变量时,引用计数才会被修改。
Refcount is only modified when you assign to an interface variable, not to an object variable.
如果将其分配给类类型变量,编译器不会添加任何引用计数代码。引用计数从未设置为 1,更不用说设置为 2。
如果您将
c1
和c2
声明为IInterface
,您将看到预期的行为TTestClass
的。The compiler doesn't add in any ref-counting code if you assign it to a class type variable. The refcount was never even set to 1, much less 2.
You'll see the expected behavior if you declare
c1
andc2
asIInterface
instead ofTTestClass
.