gpt4 book ai didi

delphi - 如何为 Interface 对象注册预期的内存泄漏

转载 作者:行者123 更新时间:2023-12-03 15:46:43 26 4
gpt4 key购买 nike

是否可以使用RegisterExpectedMemoryLeak过程注册接口(interface)?

我有一个私有(private)字段声明为:

FDragDropTarget: IDropTarget;

然后我创建此对象的一个​​实例,并尝试为此对象注册已知的内存泄漏:

  FDragDropTarget := TDropTarget.Create(lcMain.Handle, FDragDrop);
RegisterExpectedMemoryLeak(FDragDropTarget);

但是,我收到编译器错误,指出存在不兼容的类型:“Pointer”和“IDropTarget”。对我来说,我的接口(interface)实例无论如何都是一个指针?

那我可以这样做吗?这是通过我的 .dpr 文件中的 ReportMemoryLeaksOnShutdown := True 语句报告的。

begin
ReportMemoryLeaksOnShutdown := True;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.

TDropTarget 是我对 IDropTarget 接口(interface)的实现:

  TDropTarget = class(TInterfacedObject, IDropTarget)
...
end;

谢谢

最佳答案

泄漏的不是接口(interface),而是实现它的对象。所以我认为这就是需要注册的:

FDragDropTargetObj: TDropTarget;
FDragDropTarget: DropTarget;


FDragDropTargetObj := TDropTarget.Create(lcMain.Handle, FDragDrop);
FDragDropTarget := FDragDropTargetObj;
RegisterExpectedMemoryLeak(FDragDropTargetObj);

关于delphi - 如何为 Interface 对象注册预期的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com