我有一个TIdHTTP在运行时期间创建的对象,它有IOHandler和Compression设置为在运行期间也创建的对象的属性.如果我把Free我的TIdHTTP对象,这是否会自动释放的IOHandler,并Compression分配给它的对象?
function CreateHTTP():TIdHTTP;
begin
Result := TIdHTTP.Create(nil);
Result.Compressor := TIdCompressorZLib.Create(Result)
Result.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
end;
Run Code Online (Sandbox Code Playgroud)
在应用程序的其他地方,这个代码被多次调用:
with CreateHTTP() do begin
Data := Get('http://google.com');
Free;
end;
Run Code Online (Sandbox Code Playgroud)
这会导致Compressor和IOHandler的内存泄漏,还是会自动销毁?
为了防万一它没有被自动销毁,我为这个Destroy方法添加了一个覆盖:
destructor TIdHTTP.Destroy;
begin
if Assigned(Compressor) then
Compressor.Free;
if Assigned(IOHandler) then
IOHandler.Free;
inherited;
end;
Run Code Online (Sandbox Code Playgroud) delphi ×1