小编Nic*_*k C的帖子

TIdHTTP.Free还清理了指定的Compressor和IOHandler吗?

我有一个TIdHTTP在运行时期间创建的对象,它有IOHandlerCompression设置为在运行期间也创建的对象的属性.如果我把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

3
推荐指数
1
解决办法
236
查看次数

标签 统计

delphi ×1