是否可以使用RegisterExpectedMemoryLeak
過程註冊接口?如何爲接口對象註冊預期的內存泄漏
我有一個私有字段聲明爲:
FDragDropTarget: IDropTarget;
我然後創建一個這樣的實例,並嘗試註冊此對象的一個已知的內存泄漏:
FDragDropTarget := TDropTarget.Create(lcMain.Handle, FDragDrop);
RegisterExpectedMemoryLeak(FDragDropTarget);
不過,我得到一個編譯器錯誤,指出存在不兼容的類型:'指針'和'IDropTarget'。對我來說,我的界面實例是一個指針嗎?
那麼我可以這樣做嗎?它是通過ReportMemoryLeaksOnShutdown:= True語句在我的.dpr文件中報告的。
begin
ReportMemoryLeaksOnShutdown := True;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
TDropTarget是我實現接口下降目標的:
TDropTarget = class(TInterfacedObject, IDropTarget)
...
end;
感謝
謝謝。我想到了類型轉換,但並不確定舊的「不要混合接口和對象引用」,但是鑑於你和David都提供了相同的解決方案,它必須是正確的! – Jason
是的。你說的不是混合......但在這種情況下你不會。你所要做的就是向一塊內存註冊一個匿名指針,讓內存管理器檢查內存是否被釋放。它實際上與對象或接口無關。這是他們從未告訴你的例外之一。 ;) – GolezTrol